了解把手中的选项 #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}}

由此可见:

  1. Ember 将迭代关联控制器的 mylist 列表 属性 中的对象。
  2. 对于访问的每个项目(此处称为 myitem),它将呈现其 name 属性,然后是换行符
  3. 每个项目都将使用名为 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 最终将成为一个 属性,它正好存在于加载视图实例中。