我在路由器中将路由定义为:
...
this.resource('cart', {path: 'my/cart'});
...
MyApp.CartRoute = Ember.Route.extend({
model: function(params) {
return this.store.find('cart');
}
});
在我的CartController(ArrayController)中我有一个动作(addToCart)中的这行代码:
this.transitionToRoute('cart', this.get('model'));
在其他路由的模板中,我将该操作称为:
<button {{action 'addToCart' product target='controllers.cart'}}>Add To Cart</button>
单击该按钮时,出现以下错误:
Uncaught Error: More context objects were passed than there are dynamic segments for the route: cart
对我的理解,Ember应该已经认识到我是在给它传递一个模型,跳过模型挂钩,这是我想要的。
这可以通过在我的路径定义中添加一个随机的、无用的动态段来解决,然后在我的CartRoute中定义serialize。
我是不是想错了?
2条答案
按热度按时间b1uwtaje1#
在
您正在向没有动态段的路由
cart
发送一些数据对象。错误消息应与以下行一起消失也就是说,我有一种感觉,你的应用程序的体系结构可能是可以改进的。但是我需要更多的代码来确定。无论如何,你应该看看是否可以把操作处理程序放在其他地方,并使用没有目标的冒泡操作。再次强调,这只是一种感觉,我对你的代码了解不够,无法确定。
xhv8bpkk2#
现在说这个有点晚了,但听起来你可能希望你的购物车是一个服务,而不是一堆不同的特定路线的模型。事实上,购物车是Ember docs页面上目前使用的解释服务用法的特定示例:https://guides.emberjs.com/release/services/#toc_defining-services
这将允许您在服务级别管理Cart的获取和本地缓存,然后您可以将该服务直接注入到相关的控制器中,或者将该服务注入到路由中,并让路由返回服务管理的Cart对象作为其模型。