Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js Emberjs:跨控制器绑定失败,因为';内容';不';还不存在_Ember.js - Fatal编程技术网

Ember.js Emberjs:跨控制器绑定失败,因为';内容';不';还不存在

Ember.js Emberjs:跨控制器绑定失败,因为';内容';不';还不存在,ember.js,Ember.js,我正在尝试使用“需要”功能来允许一个控制器从另一个控制器获取值。下面是一个JSFIDLE,它显示了绑定值之前我的应用程序的精简版本: 基本上,我的ApplicationController有一个clickCount属性,每当单击其中一个Dish链接时,该属性就会更新(通过一个操作)。单击链接也会通过linkTo激活DishRoute 现在,我希望包含的DishController也可以访问ApplicationController的clickCount。因此,我添加了'needs'属性和clic

我正在尝试使用“需要”功能来允许一个控制器从另一个控制器获取值。下面是一个JSFIDLE,它显示了绑定值之前我的应用程序的精简版本:

基本上,我的ApplicationController有一个clickCount属性,每当单击其中一个Dish链接时,该属性就会更新(通过一个操作)。单击链接也会通过linkTo激活DishRoute

现在,我希望包含的DishController也可以访问ApplicationController的clickCount。因此,我添加了'needs'属性和clickCountBinding属性(必须在JSFIDLE中取消注释)。然后,当我点击一个链接时,我收到一个投诉: 断言失败:无法将集合('clickCount',0)委托给对象代理的'content'属性:其'content'未定义

显然,绑定是在控制器上设置模型内容之前激活的。由于控制器是由linkTo设置的,因此不会调用my DishRoute.model()和DishRoute.setupController()方法。此外,在绑定错误发生之前,甚至没有调用DishController.init()方法

我考虑了将内容成员对象粘贴到类中的可能性(在JSFIDLE中注释掉),但这样做会产生一个奇怪的结果:对于不同的链接,单击次数分别递增。有趣,但不是我想要的


那么-如何在这些控制器之间共享clickCount值?是否有其他方法设置DishController中的内容,以便绑定工作?

您只是稍微误解了错误消息。
问题是,您已经从
ObjectController
ApplicationController
进行了子类化,即使它没有要代理的底层内容对象,在这种情况下,您应该只使用用户
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'
});

您只是稍微误解了错误消息。
问题是,您已经从
ObjectController
ApplicationController
进行了子类化,即使它没有要代理的底层内容对象,在这种情况下,您应该只使用用户
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'
});

好吧,这使得这个简单的案例起作用了——尽管我发现我需要将DishController改为Controller,而不是ApplicationController。然而,我确实需要DishController成为一个ObjectController(也许我的JSFiddle太简单了,不能说清楚)。有没有办法让两个ObjectController一起工作?获取细节控制器集的内容似乎是一个问题。如果控制器没有先设置内容,则显然无法将属性设置为控制器的内容,但大多数情况下,您实际上希望在控制器上设置值。要使其工作,只需在ControllerInDect中将值初始化为null。在DishController中设置clickCount的初始值确实起到了作用。非常感谢,尽管我不得不承认这一点余烬魔法让我困惑。对于其他看到这一点的人来说,一个有效的版本是非常感谢你们,我对一些非常相似的东西挠头,这对我很有帮助。我只是想让你知道。好吧,这让这个琐碎的案例起作用了——尽管我发现我需要将DishController更改为控制器,而不是ApplicationController。然而,我确实需要DishController成为一个ObjectController(也许我的JSFiddle太简单了,不能说清楚)。有没有办法让两个ObjectController一起工作?获取细节控制器集的内容似乎是一个问题。如果控制器没有先设置内容,则显然无法将属性设置为控制器的内容,但大多数情况下,您实际上希望在控制器上设置值。要使其工作,只需在ControllerInDect中将值初始化为null。在DishController中设置clickCount的初始值确实起到了作用。非常感谢,尽管我不得不承认这一点余烬魔法让我困惑。对于其他看到这一点的人来说,一个有效的版本是非常感谢你们,我对一些非常相似的东西挠头,这对我很有帮助。只是想让你知道。