Backbone.js View определяет, какой атрибут модели изменен

Как я могу узнать, какой атрибут модели представления изменен в функции рендеринга? (В функции рендеринга «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;
    }
});

person Florim Maxhuni    schedule 28.12.2011    source источник
comment
оба ответа ниже предлагают решения, но самый простой из них - использовать более конкретное событие, такое как change:attrName в вашем случае change:Name...   -  person Sander    schedule 29.12.2011


Ответы (2)


Я считаю, что функция changedAttributes — это то, что вам нужно.

changedAttributesmodel.changedAttributes([attributes])
Получить хэш только измененных атрибутов модели. При желании можно передать хэш внешних атрибутов, возвращая атрибуты в этом хэше, которые отличаются от модели. Это можно использовать, чтобы выяснить, какие части представления следует обновить или какие вызовы необходимо выполнить для синхронизации изменений с сервером.

или чтобы проверить, изменился ли конкретный атрибут, используйте функцию hasChanged

hasChangedmodel.hasChanged([attribute])
Изменилась ли модель с момента последнего события "изменения"? Если атрибут передан, возвращает true, если этот конкретный атрибут изменился.

var nameChanged = this.model.hasChanged("name");
person Bobby    schedule 28.12.2011

Вы можете привязаться к change:name, если хотите получать уведомления только об изменении имени: http://documentcloud.github.com/backbone/#Model-set

person Andreas Köberle    schedule 28.12.2011