在 Backbone.js 中的模型中使用 setTimeout

Using setTimeout inside Model in Backbone.js

本文关键字:setTimeout 模型 Backbone js      更新时间:2023-09-26

我是骨干网的新手,我正在尝试通过制作一些示例应用程序来学习它。一个是足球经理游戏。我正在尝试制作一个"匹配"模型,该模型具有一个名为"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. 该如何修复它,或者我应该怎么做?

我认为问题出在MatchView的渲染方法上。

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

仅尝试绑定事件一次,而不是每次都尝试绑定事件。另外,我认为您也只能调用一次_.template(..)。