如何通过Ember.TextField中的insertNewline事件访问Ember.Checkbox checkedBinding?

时间:2013-10-15 13:53:52

标签: javascript ember.js

我正在尝试在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);
      }
  }
});

1 个答案:

答案 0 :(得分:1)

有几件事:

小写属性名称

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

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

从组件引用父控制器

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

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

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

从控制器访问其他控制器

此外,您应该使用needs system

,而不是使用容器访问其他控制器
App.ApplicationController = Em.ArrayController.extend({
    needs: ['artists'],
    ....
})

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

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

将新样式用于输入

您还应该切换到使用inputs, {{input ... }}的新样式,而不是直接使用{{view}}帮助程序。

updated JSFiddle