解除模型中的视图

时间:2015-01-14 00:38:46

标签: javascript backbone.js

这个jsfiddle(http://jsfiddle.net/mjmitche/avo5nnus/39/)演示了我遇到的问题,但我会在这里解释一下。我的主视图具有startIntervalstopInterval功能。在startInterval中,我调用一个方法,该方法将值添加到我在startInterval函数中使用代码this.model = new myModel()创建的模型内的stats数组中。如果我再次停止然后startInterval(此时代码再次运行this.model = new myModel(),则在第一次按下startInterval按钮时,它仍然是相同的数组。

例如,如果我按开始,并且随机数3被添加到stats数组(在addToModel函数中),然后按停止,然后再次按开始,这会向统计数据添加5数组,数组实际上会有一个3和一个5.如果按下开始和停止,你可以看到jsfiddle中的值打印到屏幕上。

在我的实际应用中,我尝试过将stats数组设置为[]但我无法清除它。理想情况下,我希望从模型中取消引用该视图。

startInterval: function(){

    this.model = new myModel();
    this.model.intervalId =            setInterval(this.addToModel.bind(this), 1000);

},

stopInterval: function(){

    clearInterval(this.model.intervalId);
    var modelstats = this.model.get("stats");


},
addToModel: function(){
    var arr = this.model.get("stats");
    var num = Math.floor((Math.random() * 10) + 1);

    var view = new StatView({model: this.model});  

    arr.push(num);
    this.model.set({"stats" : arr });
}

关于解决方案的任何想法?

虽然我的代码没有显示,但最终会将模型添加到集合中,然后保存到数据库中,因此如果唯一的解决方案是破坏模型,请考虑到这一点(即有没有办法销毁模型而不将其从集合中删除)

1 个答案:

答案 0 :(得分:2)

你的"统计数据"属性在默认情况下在原型上共享。 因为在javascript数组和对象是可变的,它引用相同的数组并且不创建新的数组。 您可以做的是将默认值作为返回默认值的函数 - 这样它们对于每个实例都是唯一的

var myModel = Backbone.Model.extend({

  defaults: function () {
    return {        
      stats: [],
      intervalId: ''

    }
  }

});