了解车把的选项#view帮助Ember.JS

时间:2015-09-02 01:33:53

标签: ember.js handlebars.js

这是针对Ember.JS版本1.11

我刚刚开始学习Ember,并负责维护现有项目。我可以看到我的许多把手文件中的代码如下所示:

 {{#each myitem in controller.mylist}}
    {{#view "loading" story=myitem}}
       {{myitem.name}}<br>
    {{/view}}
 {{/each}}

我可以从中看到:

  1. Ember将遍历关联控制器的mylist list属性中的对象。
  2. 对于访问过的每件商品(此处称为myitem),它将呈现其name属性,然后是换行符
  3. 每个项目都将使用名为App.LoadingView的Ember View进行渲染。这是因为Ember将#view助手的第一个参数(在本例中为"loading")自动映射到视图构造函数的标识符。
  4. 我在把手documentation的帮助下弄清了这个。但是我对#view助手的第二个参数感到困惑,是story=myitemdocumentation说:

      

    {{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;它出现的唯一地方是把手文件。

    那么它在哪里使用?

1 个答案:

答案 0 :(得分:1)

App.LoadingView是一个类,而不是一个实例。当Ember需要创建它的实例时,它将在实例上调用create并传入参数。

在您的情况下,与您的模板对应的代码如下所示:

var j = App.LoadingView.create({
  story: myItem
});

story最终将成为一个刚好位于加载视图实例上的属性。