将视图绑定到控制器属性

时间:2014-03-21 01:58:51

标签: javascript ember.js

我有一个控制器,用于填充项目列表

/** controller/index.js **/
var IndexController = Ember.Controller.extend({

      itemlist: function () {

           this.set('itemlist', ["a", "b", "c"]);
      };

});

在我的模板中,我用

调用它
/** templates/index.hbs **/
{{#each item in itemlist}}

{{/each}}

{{view "list"}}

我希望我的子视图使用来自控制器的itemlist属性。

/** views/list.js **/
var ListView = Ember.View.extend({

     perform: function () {


     }.observes('controller.itemlist')

});

它似乎不起作用。我正在使用Ember App-Kit。我已经尝试将其称为“index.itemlist”,但无济于事。有相当多的例子可以在索引视图中使用相同的方法,但不能用于注入视图(我不确定我的术语是否正确)。

1 个答案:

答案 0 :(得分:1)

你必须在使用绑定时传递它:

{{view "list" itemlistBinding="itemlist"}}

然后您可以在ListView中访问它:

ListView = Ember.View.extend({
     perform: function () {
        console.log( this.get('itemlist');
     }.observes('itemlist')
});

或者你可以传入控制器:

{{view "list" itemlistBinding="controller"}}

ListView = Ember.View.extend({
     perform: function () {
        console.log( this.get('itemlist');
     }.observes('controller.itemlist')
});

解释(来自下面的注释):通过将“Binding”添加到变量名称,可以将其值绑定到引号中的变量。这样,如果引号中的变量(控制器的项目列表)发生变化,ListView中的项目列表也会发生变化