Ember.js 让计算属性侦听其他ObjectController

Ember.js 让计算属性侦听其他ObjectController,ember.js,Ember.js,我有以下路由器: Router.map(function() { this.resource('cart', function() { // order routes this.route('shipping'); this.route('checkout'); this.route('payment'); this.route('thanks'); }); }); 在路线Cart上,我有一个c

我有以下路由器:

Router.map(function() {
    this.resource('cart', function() {
        // order routes
        this.route('shipping');
        this.route('checkout');
        this.route('payment'); 
        this.route('thanks');

    });
});
在路线
Cart
上,我有一个
cartotal
computed属性。我想在route
shipping
中的变量更改时更新它

购物车
控制器中的我的计算属性:

needs: ['cartShipping'],

cartitemsTotal: function() {
    // logic
    return totalCosts;
}.property('model.@each.price', 'controllers.cartShipping.shippingMethod'),
但是,这会产生错误:
处理路线时出错:购物车需要[controller:cartShipping]但找不到错误:需要[controller:cartShipping]但找不到它


你知道这里出了什么问题吗?

我希望这不是说显而易见的问题,你定义了“cartShipping”吗

我发现需要定义控制器才能提取属性,例如
shippingMethod

App.CartShippingController = Ember.Controller.extend({
    shippingMethod: 'method-here'
});

您不能在子控制器上使用
needs
属性,只能在父控制器上使用。您想使用
cart.shipping
控制器,但是如果您的用户在
cart.checkout
路线上怎么办?在这种情况下,
cart.shipping
控制器将不处于活动状态(如果容器还没有实例化它,它甚至可能不存在)


对于Ember.js中的几乎所有内容,您可以向上访问层次结构,但几乎无法向下访问。这就是其中之一。您可能需要重新调整路线以满足您的需要。

如果控制器没有明确定义,Ember将为您创建一个。If不会为您创建属性,因此您将返回未定义的
,但不会出现错误。我不确定这是否适用于
需求
功能,但这并不重要,因为正如我所说,您只能访问路由层次结构。Ember将在您需要控制器之前生成它。@GJK是答案,我现在在'sub controller'中切换
资源
路由项的属性。它起作用了!哇,谢谢你的洞察力!现在,我确实从“子控制器”切换属性,以触发对
资源
路由项的重新计算。