流星/铁路由器反应性无限循环

时间:2014-05-25 07:47:49

标签: meteor infinite-loop iron-router

所以我有一条路线,在渲染时我更新了用于在页面上渲染数据的文档。

但是,当我通过onRun修改数据时,我得到一个无限循环。 :( 在数据函数中执行此操作并不能解决问题,因为该方法也是反应性的,因为它似乎可以使用所有方法(onAfterAction,onBeforeAction等)。 onBeforeAction如果我可以使用它将是完美的...

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);
        }
    }
});

我打赌我错过了一些愚蠢的事情,但我现在已经被困在这一段时间超过一个小时......:)

1 个答案:

答案 0 :(得分:0)

我发现执行此操作的正确方法是将ID传递给模板,然后让模板本身具有反应性,而不是整个路径。

你知道的越多。 :)