我正在尝试使用“需要”功能来允许一个控制器从另一个控制器获取值。这是一个 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'
});
基本上,我的 ApplicationController 有一个 clickCount 属性,只要单击其中一个 Dish 链接就会更新(通过操作)。单击链接也会通过 linkTo 激活 DishRoute。
现在我希望包含的 DishController 也可以访问 ApplicationController 的 clickCount。所以我添加了“需要”属性和 clickCountBinding 属性(必须在 JSFiddle 中取消注释)。然后,当我单击一个链接时,我收到一条投诉:断言失败:无法将 set('clickCount', 0) 委托给对象代理的“内容”属性:它的“内容”未定义。
显然,在控制器上设置模型内容之前,绑定已被激活。由于控制器是由 linkTo 设置的,因此不会调用我的 DishRoute.model() 和 DishRoute.setupController() 方法。此外,在发生绑定错误之前,甚至不会调用 DishController.init() 方法。
我考虑过我应该将一个内容成员对象粘贴到类中的可能性(在 JSFiddle 中注释掉),但这样做会产生一个奇怪的结果:不同链接的点击计数分别增加。有趣,但不是我所追求的。
那么 - 我如何在这些控制器之间共享 clickCount 值?是否有其他方法可以在 DishController 中设置内容以便绑定起作用?