Meteor 流星/铁无限循环
因此,我有一个路径,在呈现时更新文档,该文档也用于呈现页面上的数据 但是,当我通过onRun修改数据时,我会得到一个无限循环: 在数据函数中这样做并不能解决问题,因为该方法也是被动的,因为似乎我可以在AfterAction、OnBeforAction等上使用所有的方法。如果我可以使用它,OnBeforAction将是完美的Meteor 流星/铁无限循环,meteor,infinite-loop,iron-router,Meteor,Infinite Loop,Iron Router,因此,我有一个路径,在呈现时更新文档,该文档也用于呈现页面上的数据 但是,当我通过onRun修改数据时,我会得到一个无限循环: 在数据函数中这样做并不能解决问题,因为该方法也是被动的,因为似乎我可以在AfterAction、OnBeforAction等上使用所有的方法。如果我可以使用它,OnBeforAction将是完美的 ViewRoomController = RouteController.extend({ data: function() { return Roo
ViewRoomController = RouteController.extend({
data: function() {
return Rooms.findOne(this.params._id);
},
onRun: function() {
var room = Rooms.findOne(this.params._id),
that = this,
messages;
if(room !== undefined) {
messages = room.messages;
//Do stuff with messages...
//This will go into an infinite loop.
//setTimeout is here just so loop doesn't lock up process.
setTimeout(function() {
Rooms.update(
that.params._id, {
$set: {
messages: messages
}
}
);
}, 1);
}
}
});
我打赌我错过了一些愚蠢的事情,但我已经被困在这个问题上一个多小时了…: 我发现正确的方法是将ID传递给模板,然后让模板本身是被动的,而不是整个路由
你知道的越多 我还尝试将onRun更改为“action”,然后调用render-cause也会导致循环。显然,我不能让data中的函数不返回DB对象,但我希望页面上的数据是反应式的。您可以尝试让数据函数返回{{u id:this.params.{u id},然后用{{with theRoom}}…{{/with}包装模板,其中theRoom是返回房间的助手。findOnethis.{u id?然后,当房间更改时,模板将重新渲染,但Iron Router不会重新运行路由。我不知道这是否可取。哦,这是个好主意。非常感谢。你真棒!