0

我正在尝试访问 Ember.TextField 中 insertNewline 事件上的 Ember.Checkbox checkedBinding。

做这个的最好方式是什么?在我失败的尝试中,ArtistsIsChecked 总是返回 false。

请参阅此小提琴以获取完整代码:http: //jsfiddle.net/jdcravens/T24ej/

App.SearchBox = Em.TextField.extend({
  insertNewline: function() {
    var query = this.get('value');
      if (this.container.lookup('controller:application').get('ArtistsIsChecked')){
          this.container.lookup('controller:artists').search(query);
      }
  }
});
4

1 回答 1

1

有几件事:

小写属性名称

复选框的绑定无法正常工作,因为属性的第一个字母需要小写:

{{view Ember.Checkbox checkedBinding="artistsIsChecked"}}

从组件引用父控制器

组件,例如 a TextField,不直接具有其父控制器/视图的上下文。您可以通过访问该targetObject属性来获取对父控制器的引用。

controller = this.get('targetObject'); // the parent controller

这使您可以在不使用容器的情况下访问父控制器的属性/方法。

从控制器访问其他控制器

此外,您应该使用需求系统,而不是使用容器来访问其他控制器。

App.ApplicationController = Em.ArrayController.extend({
    needs: ['artists'],
    ....
})

并且可以通过访问控制器的controllers属性来访问:

var artistsController = this.get('controllers.artists');

对输入使用新样式

您还应该改用新的输入样式,{{input ... }}而不是直接使用{{view}}帮助程序。

更新的 JSFiddle

于 2013-10-15T15:56:27.990 回答