通过向模型添加“更改”方法,我的视图不再受其约束?

时间:2011-12-26 09:03:35

标签: javascript backbone.js

我仍然试图围绕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});
        });
    }
});

1 个答案:

答案 0 :(得分:0)

我明白了。我覆盖了渲染方法,我发现工作方式是在初始化函数时将我想要的操作绑定到方法。

window.TimeView = Backbone.View.extend({    
    initialize: function() {
        this.bind('change', function() {
            this.set({ totalTime: this.calculateTime() }, {silent: true});
        });
    }
});