让compute属性监听其他对象控制器

时间:2014-09-15 14:16:50

标签: ember.js

我有以下路由器:

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

    });
});

在路线Cart上,我有一个cartTotal计算属性。我希望在路由shipping中的变量发生变化时更新它。

我在cart控制器中的计算属性:

needs: ['cartShipping'],

cartitemsTotal: function() {
    // logic
    return totalCosts;
}.property('model.@each.price', 'controllers.cartShipping.shippingMethod'),

然而,这会产生错误:Error while processing route: cart <app@controller:cart::ember404> needs [ controller:cartShipping ] but it could not be found Error: <app@controller:cart::ember404> needs [ controller:cartShipping ] but it could not be found

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

2 个答案:

答案 0 :(得分:2)

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

对于Ember.js中的几乎所有内容,您都可以达到层次结构,但几乎无法达到目标。这是其中一个案例。您可能需要重新构建路线以执行您想要的操作。

答案 1 :(得分:0)

我希望这不是明显的,你定义了&#34; cartShipping&#34;?

我发现需要定义控制器才能提取shippingMethod

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