理解Ember.JS的句柄#view助手中的选项
这是Ember.JS版本1.11
我刚开始学习Ember,并负责维护现有的项目。 我可以在许多我的handlebars文件中看到如下所示的代码:
{{#each myitem in controller.mylist}}
{{#view "loading" story=myitem}}
{{myitem.name}}<br>
{{/view}}
{{/each}}
我从中可以看出:
mylist
列表属性中的对象。 myitem
),它将呈现其name
属性,然后是换行符 App.LoadingView
的Ember视图App.LoadingView
。 这是由于Ember自动将#view
助手的第一个参数(本例中为"loading"
映射到视图构造函数的标识符。 我在手柄文档的帮助下对此进行了讨论。 然而,我对#view
助手的第二个参数感到困惑,因为story=myitem
。 该文件说:
{{view}}
将一个Ember.View
的新实例插入到模板中,将其选项传递给Ember.View
的create
方法,并使用提供的块作为视图自己的模板。
所以story=myitem
似乎是一个传递给视图控制器的“选项”,它在我的代码中看起来像这样:
App.LoadingView = Ember.View.extend({
didInsertElement: function() {
this.$().parents().children(".loading").fadeOut(1500);
this.$().hide().delay(600).fadeIn(500);
}
});
我在这个构造函数中看不到任何对story
引用,它似乎不是标准的#view
选项。
我还在我的项目中为“故事”进行了全球文本搜索,它出现的唯一位置是在句柄文件中。
那么它在哪里使用?
App.LoadingView
是一个类,而不是一个实例。 当Ember需要创建实例时,它会调用实例上的create并传入参数。
在你的情况下,与你的模板相对应的代码看起来像这样:
var j = App.LoadingView.create({
story: myItem
});
story
最终会成为一个只能在加载视图实例上生存的属性。
上一篇: Understanding the options in a handlebars #view helper for Ember.JS
下一篇: Don't destroy DOM elements with #each in Ember/Handlebars