在Backbone.js中使用Model内的setTimeout

时间:2013-09-17 15:33:10

标签: javascript backbone.js settimeout

我是骨干的新手,我试图通过制作一些示例应用来学习它。一个是足球经理游戏。我正在尝试制作一个“匹配”模型,它有一个名为“start()”的函数,理论上它会启动一个计数器,最多可以计算90个。这是我的模型:

var Match = Backbone.Model.extend({
    defaults: function(){
        return {
            name: "Match One",
        };
    },
    start: function() {
        console.log("match started");
        this.incrementMinute();
    },
    incrementMinute: function() {
        var min = this;
        setTimeout(function(){
            min.set('minute', ++min.minute);
            if(min.minute % 10 === 0)
                min.updateStatus();
            min.incrementMinute();
        }, 3000);
    },
    updateStatus: function() {
        this.set("detail", "Minute is now: "+this.minute);
    },
    minute: 0,
    detail: "Match is about the kick-off..."
});

我有一个“更改”侦听器附加到minutedetail。当分钟或细节发生变化时,我的视图会更新,这是正常的。但是由于某种原因,当我到达第15分钟左右时,我的浏览器选项卡崩溃了。整个标签变得没有响应,最终崩溃了。我也尝试使用setInterval,但问题仍然存在。

可在此处找到实时版本:

http://bit.ly/188TtWa

问题

  1. 为什么会这样?
  2. 我该如何解决,或者我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

我认为问题在于你的MatchView的渲染方法。

每次调用时都会绑定事件侦听器。 因此,在仅更新视图之后,您将拥有更多的事件处理程序,它们都会再次调用render方法。

只尝试一次绑定事件而不是每次。 另外,我认为你也可以只召唤一次_.template(..)。