理解Ember.JS的句柄#view助手中的选项

这是Ember.JS版本1.11

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

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

我从中可以看出:

  • Ember将迭代关联控制器的mylist列表属性中的对象。
  • 对于每个访问过的项目(这里称为myitem ),它将呈现其name属性,然后是换行符
  • 每个项目都将使用名为App.LoadingView的Ember视图App.LoadingView 。 这是由于Ember自动将#view助手的第一个参数(本例中为"loading"映射到视图构造函数的标识符。
  • 我在手柄文档的帮助下对此进行了讨论。 然而,我对#view助手的第二个参数感到困惑,因为story=myitem 。 该文件说:

    {{view}}将一个Ember.View的新实例插入到模板中,将其选项传递给Ember.Viewcreate方法,并使用提供的块作为视图自己的模板。

    所以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最终会成为一个只能在加载视图实例上生存的属性。

    链接地址: http://www.djcxy.com/p/61595.html

    上一篇: Understanding the options in a handlebars #view helper for Ember.JS

    下一篇: Don't destroy DOM elements with #each in Ember/Handlebars