我正在尝试使用'needs'功能允许一个控制器从另一个控制器获取值.这是一个JSFiddle,在绑定值之前显示我的应用程序的精简版本:http: //jsfiddle.net/kevinwh/WRxnE/4/
App.ApplicationController = Ember.ObjectController.extend({
init: function() {
this._super();
},
dishClicked: function() {
console.log('clicked');
this.incrementProperty('clickCount');
}
});
App.DishController = Ember.ObjectController.extend({
needs: ['application'],
init: function() {
this._super();
},
//clickCountBinding: 'controllers.application.clickCount'
});
Run Code Online (Sandbox Code Playgroud)
基本上,我的ApplicationController有一个clickCount属性,只要单击其中一个Dish链接,就会更新(通过操作).点击链接也可以通过linkTo激活DishRoute.
现在,我希望包含的DishController也可以访问ApplicationController的clickCount.所以我添加'needs'属性和clickCountBinding属性(必须在JSFiddle中取消注释).然后,当我点击一个链接时,我得到一个投诉:断言失败:无法将set('clickCount',0)委托给object proxy的'content'属性:它的'content'未定义.
显然,在控制器上设置模型内容之前,正在激活绑定.由于控制器是由linkTo设置的,因此我的DishRoute.model()和DishRoute.setupController()方法不会被调用.此外,在绑定错误发生之前甚至不调用DishController.init()方法.
我考虑过我应该将内容成员对象粘贴到类中(在JSFiddle中注释掉)的可能性,但这样做会产生奇怪的结果:点击计数会针对不同的链接单独递增.有趣,但不是我追求的.
那么 - 如何在这些控制器之间共享clickCount值?是否有其他方法在DishController中设置内容,以便绑定可以工作?
您只是略微误解了错误消息.
问题在于,即使它没有要代理的基础内容对象,您也已经将其子类化了ApplicationController,在这种情况下ObjectController您应该只是用户Ember.Controller.话虽这么说,如果你有一个计数器,你应该将其默认为零.
App.ApplicationController = Ember.Controller.extend({
clickCount: 0,
dishClicked: function() {
console.log('clicked');
this.incrementProperty('clickCount');
}
});
App.DishController = Ember.ObjectController.extend({
needs: ['application'],
clickCountBinding: 'controllers.application.clickCount'
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1280 次 |
| 最近记录: |