我仍然试图围绕Backbone.js如何工作。我有一个模型,我想在其中一个属性发生变化时运行计算。
window.Print = Backbone.Model.extend({
change: function () {
this.set({ totalTime: this.calculateTime() }, {silent: true});
}
哪个有效。每当修改属性时,都会触发“更改”方法并完成计算。
问题是在那里使用“更改”方法,我的视图不再重新呈现更改(我假设它不再受更改方法约束?)。如果我把它拿出来,我的观点会按预期运作。
我的观点如下:
window.TimeView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'render');
this.model.bind('change', this.render);
this.template = _.template($('#template').html());
},
render: function(){
var renderedContent = this.template(this.model.toJSON());
$(this.el).html(renderedContent);
return this;
}
});
我有一种感觉我正在接近这个......我的计算不应该在模型中完成吗?它应该在哪里完成? (Backbone是我第一次尝试实现MVC)
修改 我想到了。我应该绑定代码来改变,而不是覆盖它。
window.Print = Backbone.Model.extend({
initialize: function() {
this.bind('change', function() {
this.set({ totalTime: this.calculateTime() }, {silent: true});
});
}
});
答案 0 :(得分:0)
我明白了。我覆盖了渲染方法,我发现工作方式是在初始化函数时将我想要的操作绑定到方法。
window.TimeView = Backbone.View.extend({
initialize: function() {
this.bind('change', function() {
this.set({ totalTime: this.calculateTime() }, {silent: true});
});
}
});