ember.js 使用transitionToRoute时,将不带动态线段的路径传递给当前模型会导致错误

xqnpmsa8  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(112)

我在路由器中将路由定义为:

...
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。
我是不是想错了?

b1uwtaje

b1uwtaje1#

this.transitionToRoute('cart', this.get('model'));

您正在向没有动态段的路由cart发送一些数据对象。错误消息应与以下行一起消失

this.transitionToRoute('cart');

也就是说,我有一种感觉,你的应用程序的体系结构可能是可以改进的。但是我需要更多的代码来确定。无论如何,你应该看看是否可以把操作处理程序放在其他地方,并使用没有目标的冒泡操作。再次强调,这只是一种感觉,我对你的代码了解不够,无法确定。

xhv8bpkk

xhv8bpkk2#

现在说这个有点晚了,但听起来你可能希望你的购物车是一个服务,而不是一堆不同的特定路线的模型。事实上,购物车是Ember docs页面上目前使用的解释服务用法的特定示例:https://guides.emberjs.com/release/services/#toc_defining-services
这将允许您在服务级别管理Cart的获取和本地缓存,然后您可以将该服务直接注入到相关的控制器中,或者将该服务注入到路由中,并让路由返回服务管理的Cart对象作为其模型。

相关问题