backbone.js View确定模型的哪个属性发生了变化

时间:2011-12-28 21:43:18

标签: javascript backbone.js backbone-model

如何知道渲染函数中视图模型的哪个属性发生了变化? (在渲染函数中,“e”是模型,但我只需要更改的属性。)我需要知道这个以了解要使用的模板。或者还有另一种方法可以做到这一点吗?

window.Person = Backbone.Model.extend({});

window.Njerzit = Backbone.Collection.extend({
    model: Person,
    url: '/Home/Njerzit'
});

window.PersonView = Backbone.View.extend({
    tagName: 'span',

    initialize: function () {
        _.bindAll(this, 'render');
        this.model.bind('change', this.render);
    },

    render: function (e) {
        //if model name is changed, I need to render another template
        this.template = _.template($('#PersonTemplate').html());
        var renderContent = this.template(this.model.toJSON());
        $(this.el).html(renderContent);
        return this;
    }
});

2 个答案:

答案 0 :(得分:14)

我相信changedAttributes功能正是您正在寻找的功能

  

<强> changedAttributesmodel.changedAttributes([属性])
  仅检索已更改的模型属性的哈希。 (可选)   可以传入外部属性哈希,返回属性   在那个与模型不同的哈希中。这可以用来计算   应该更新视图的哪些部分,或者需要调用哪些部分   可以将更改同步到服务器。

或检查特定属性是否已更改使用hasChanged函数

  

<强> hasChangedmodel.hasChanged([属性])
  自上次“更改”事件以来模型是否已更改?如果传递属性,则返回true   如果该特定属性已更改。

var nameChanged = this.model.hasChanged("name");

答案 1 :(得分:12)

如果您只想通知名称是否已更改,则可以绑定到change:namehttp://documentcloud.github.com/backbone/#Model-set