我有以下路由器:
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
知道这里出了什么问题吗?
答案 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'
});