从模型中取消视图的绑定
unbinding a view from a model
这个jsfiddle(http://jsfiddle.net/mjmitche/avo5nnus/39/)演示了我遇到的问题,但我会在这里解释。我有一个具有startInterval
和stopInterval
功能的主视图。在 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: ''
}
}
});
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 取消绑定主干视图事件
- Backbone.js将模型绑定到视图时出错
- 使用knockout.js将数组绑定到视图模型
- 如何在angularjs中检查Kendo树视图数据绑定事件
- Ember.js/HHandlebars:使用{{view}}助手渲染的视图不绑定属性
- Angular $scope更新、导航和 $scope.$apply() 后不绑定到视图
- 在 AngularJS 中将数据从视图绑定到控制器
- Emberjs - 将参数动态绑定到视图
- 挖空、视图模型位于其他对象和数据绑定中
- 如何将经度/经度值绑定到挖空视图模型方法
- 主干.js绑定到集合“添加”呈现视图两次
- 对视图上函数的角度绑定导致对数据服务的无限调用
- 如何将文件夹中包含的控制器动态绑定到angularjs中的视图
- 正在将逻辑从视图移动到自定义绑定
- 如何在数据绑定视图中模板化If Else结构
- 显示具有 MVC 数据绑定视图模型 ASP.NET JQuery 对话框的最佳方式
- 带有 JavaScript 挖空的绑定视图
- 如何在不重新绘制绑定视图的情况下重新加载angularjs范围数据
- React和Flux -如何绑定视图来存储数据