1

我正在尝试使用“需要”功能来允许一个控制器从另一个控制器获取值。这是一个 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 中设置内容以便绑定起作用?

4

1 回答 1

5

您只是稍微误解了错误消息。
问题是您已经对ApplicationControllerfrom 进行了子类化,ObjectController即使它没有要代理的基础内容对象,Ember.Controller在这种情况下您应该只是 user 。话虽如此,如果你有一个计数器,你可能应该将它默认为零。

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'
});
于 2013-05-02T02:27:23.213 回答