从模型中取消视图的绑定

unbinding a view from a model

本文关键字:绑定 视图 取消 模型      更新时间:2023-09-26

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

例如,如果我按开始,随机数 3 被添加到 stats 数组中(在 addToModel 函数中),然后按停止,然后再次按 start 向 stats 数组添加一个 5,该数组实际上将有一个 3 和一个 5。如果按开始和停止,您可以在 jsfiddle 中看到值打印到屏幕上。

在我的实际应用程序中,我尝试执行诸如将统计信息数组设置为[]之类的操作,但无法清除它。理想情况下,我希望从模型中取消引用视图。

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

对解决方案有什么想法吗?

虽然我的代码没有显示它,但模型最终会被添加到集合中,然后保存到数据库中,所以如果唯一的解决方案涉及销毁模型,请考虑这一点(即有没有办法在不将其从集合中删除的情况下销毁模型)

您的"stats"属性通过默认值在原型上共享。因为在 JavaScript 中数组和对象是可变的,所以它引用同一个数组并且不会创建一个新数组。相反,您可以做的是将默认值作为返回默认值的函数 - 这样它们在每个实例中都是唯一的

var myModel = Backbone.Model.extend({
  defaults: function () {
    return {        
      stats: [],
      intervalId: ''
    }
  }
});