Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 流星/铁无限循环_Meteor_Infinite Loop_Iron Router - Fatal编程技术网

Meteor 流星/铁无限循环

Meteor 流星/铁无限循环,meteor,infinite-loop,iron-router,Meteor,Infinite Loop,Iron Router,因此,我有一个路径,在呈现时更新文档,该文档也用于呈现页面上的数据 但是,当我通过onRun修改数据时,我会得到一个无限循环: 在数据函数中这样做并不能解决问题,因为该方法也是被动的,因为似乎我可以在AfterAction、OnBeforAction等上使用所有的方法。如果我可以使用它,OnBeforAction将是完美的 ViewRoomController = RouteController.extend({ data: function() { return Roo

因此,我有一个路径,在呈现时更新文档,该文档也用于呈现页面上的数据

但是,当我通过onRun修改数据时,我会得到一个无限循环: 在数据函数中这样做并不能解决问题,因为该方法也是被动的,因为似乎我可以在AfterAction、OnBeforAction等上使用所有的方法。如果我可以使用它,OnBeforAction将是完美的

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不会重新运行路由。我不知道这是否可取。哦,这是个好主意。非常感谢。你真棒!