了解把手中的选项 #view helper for Ember.JS
Understanding the options in a handlebars #view helper for Ember.JS
这是 Ember.JS 版本 1.11
我刚刚开始学习 Ember,并负责维护现有项目。我可以在我的许多车把文件中看到如下代码:
{{#each myitem in controller.mylist}}
{{#view "loading" story=myitem}}
{{myitem.name}}<br>
{{/view}}
{{/each}}
由此可见:
- Ember 将迭代关联控制器的
mylist
列表 属性 中的对象。
- 对于访问的每个项目(此处称为
myitem
),它将呈现其 name
属性,然后是换行符
- 每个项目都将使用名为
App.LoadingView
的 Ember 视图呈现。这是由于 Ember 将 #view
助手的第一个参数(在本例中为 "loading"
)自动映射到视图构造函数的标识符。
我在把手的帮助下理解了这个 documentation. However I'm puzzled by the second parameter to the #view
helper, being story=myitem
. The documentation 说:
{{view}}
inserts a new instance of an Ember.View
into a template
passing its options to the Ember.View
's create
method and using the
supplied block as the view's own template.
所以 story=myitem
似乎是传递给视图控制器的 "option",在我的代码中它看起来像这样:
App.LoadingView = Ember.View.extend({
didInsertElement: function() {
this.$().parents().children(".loading").fadeOut(1500);
this.$().hide().delay(600).fadeIn(500);
}
});
我在这个构造函数中看不到任何对 story
的引用,它似乎不是标准的 #view
选项。
我还在我的项目中对 "story" 进行了全局文本搜索,它出现的唯一地方是车把文件。
那么它用在什么地方呢?
App.LoadingView
是一个 class,不是实例。当Ember需要创建它的实例时,它会在实例上调用create并传入参数。
在您的情况下,与您的模板对应的代码如下所示:
var j = App.LoadingView.create({
story: myItem
});
story
最终将成为一个 属性,它正好存在于加载视图实例中。
这是 Ember.JS 版本 1.11
我刚刚开始学习 Ember,并负责维护现有项目。我可以在我的许多车把文件中看到如下代码:
{{#each myitem in controller.mylist}}
{{#view "loading" story=myitem}}
{{myitem.name}}<br>
{{/view}}
{{/each}}
由此可见:
- Ember 将迭代关联控制器的
mylist
列表 属性 中的对象。 - 对于访问的每个项目(此处称为
myitem
),它将呈现其name
属性,然后是换行符 - 每个项目都将使用名为
App.LoadingView
的 Ember 视图呈现。这是由于 Ember 将#view
助手的第一个参数(在本例中为"loading"
)自动映射到视图构造函数的标识符。
我在把手的帮助下理解了这个 documentation. However I'm puzzled by the second parameter to the #view
helper, being story=myitem
. The documentation 说:
{{view}}
inserts a new instance of anEmber.View
into a template passing its options to theEmber.View
'screate
method and using the supplied block as the view's own template.
所以 story=myitem
似乎是传递给视图控制器的 "option",在我的代码中它看起来像这样:
App.LoadingView = Ember.View.extend({
didInsertElement: function() {
this.$().parents().children(".loading").fadeOut(1500);
this.$().hide().delay(600).fadeIn(500);
}
});
我在这个构造函数中看不到任何对 story
的引用,它似乎不是标准的 #view
选项。
我还在我的项目中对 "story" 进行了全局文本搜索,它出现的唯一地方是车把文件。
那么它用在什么地方呢?
App.LoadingView
是一个 class,不是实例。当Ember需要创建它的实例时,它会在实例上调用create并传入参数。
在您的情况下,与您的模板对应的代码如下所示:
var j = App.LoadingView.create({
story: myItem
});
story
最终将成为一个 属性,它正好存在于加载视图实例中。