这是针对Ember.JS版本1.11
我刚刚开始学习Ember,并负责维护现有项目。我可以看到我的许多把手文件中的代码如下所示:
{{#each myitem in controller.mylist}}
{{#view "loading" story=myitem}}
{{myitem.name}}<br>
{{/view}}
{{/each}}
我可以从中看到:
mylist
list属性中的对象。 myitem
),它将呈现其name
属性,然后是换行符App.LoadingView
的Ember View进行渲染。这是因为Ember将#view
助手的第一个参数(在本例中为"loading"
)自动映射到视图构造函数的标识符。我在把手documentation的帮助下弄清了这个。但是我对#view
助手的第二个参数感到困惑,是story=myitem
。 documentation说:
{{view}}
将Ember.View
的新实例插入到模板中 将其选项传递给Ember.View
create
方法并使用 提供了块作为视图的模板。
所以story=myitem
似乎是一个&#34;选项&#34;传递给视图控制器,在我的代码中看起来像这样:
App.LoadingView = Ember.View.extend({
didInsertElement: function() {
this.$().parents().children(".loading").fadeOut(1500);
this.$().hide().delay(600).fadeIn(500);
}
});
我在这个构造函数中看不到story
的任何引用,它似乎不是标准的#view
选项。
我还在我的项目中进行了全球文本搜索&#34; story&#34;它出现的唯一地方是把手文件。
那么它在哪里使用?
答案 0 :(得分:1)
App.LoadingView
是一个类,而不是一个实例。当Ember需要创建它的实例时,它将在实例上调用create并传入参数。
在您的情况下,与您的模板对应的代码如下所示:
var j = App.LoadingView.create({
story: myItem
});
story
最终将成为一个刚好位于加载视图实例上的属性。