我正在尝试在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);
}
}
});
答案 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}}
帮助程序。