我正在meteor中建立一个在线商店,客户可以在商店中定制产品。我设置了一个名为Inventory
的仅限客户端的集合,它存储了所有产品数据,并根据用户输入进行相应更新。一旦用户准备结账,我将产品数据转储到客户端&服务器端集合称为ShoppingCart
。我想允许用户在Inventory
中返回并修改对产品的修改,以便我将路由器设置为$set
的{{1}}数据ShoppingCart
如果找到匹配:
Inventory
编辑:这似乎导致我的路由器方法在Router.route '/:_type/:_id', ->
Session.set "inCart", false
@render @params._type,
data: =>
storedItem = ShoppingCart.findOne {
userId: Meteor.userId(),
image: @params._id
}
if storedItem?
delete storedItem._id
Inventory.update {image: @params._id}, {
$set: storedItem
}
Inventory.findOne image: @params._id
中的数据发生变化时陷入无限循环。有没有办法避免这个问题?有没有更好的方法来处理这类数据我应该考虑?
答案 0 :(得分:1)
MAJOR CAVEAT - 我不做CoffeeScript,所以这是我通过编译器放置代码时可以收集的内容。
我认为问题在于数据功能是被动的,并且您正在更新和从其中的Inventory集合中返回项目。每次路由运行时,除非没有storedItem
,否则它将使其自身所依赖的计算无效,从而立即重新运行(并且随后再次执行相同的操作等)。
作为一般规则,我认为从数据函数中更新集合确实是一个非常糟糕的想法 - 如果必须在路由函数中执行此操作,请考虑onRun
,或者onBeforeAction
挂钩进行更新。
最后,仅仅因为我不明白:为什么你需要将ShoppingCart中的商品转回库存?除非用户已经开始新会话,否则它不应该存在吗?