Вид backbone.js определяет, какой атрибут модели изменяется - PullRequest
6 голосов
/ 29 декабря 2011

Как узнать, какой атрибут модели представления изменяется в функции рендеринга? (В функции рендеринга «е» является моделью, но мне нужен только атрибут, который изменяется.) Мне нужно знать это, чтобы знать, какой шаблон использовать. Или есть другой способ сделать это?

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 ]

14 голосов
/ 29 декабря 2011

Я считаю, что функция changedAttributes - это то, что вы ищете

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

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

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

var nameChanged = this.model.hasChanged("name");
12 голосов
/ 29 декабря 2011

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

...