Привязка события Backbone change к атрибуту модели в коллекции

У меня есть представление, которое принимает collection, как показано ниже:

MyView = Backbone.View.extend({
    initialize: function() {
       this.collection.on("change://an attribute of a model in aCollectionToRender", someAction);
    }
});

var MyViewInstance = new MyView({
    collection: aCollectionToRender
});

По сути, я не хочу, чтобы MyView прослушивал изменения во всей коллекции, а только в одном атрибуте модели, содержащейся в коллекции.

Я понимаю, что есть несколько альтернатив этому:

  1. Создайте представления для каждой модели aCollectionToRender и прикрепите .on("change") событий в этих представлениях. Я не хочу этого делать, потому что это неправильно в моей ситуации.
  2. Просто создайте событие this.collection.on("change") и установите фильтр обработчика событий в соответствии с моими требованиями. Это менее элегантно, и если Backbone уже позволяет мне писать фильтры событий, как я просил выше, это дублирующийся код.

Мне просто интересно, есть ли способ написать прослушиватель событий, который уже выполняет фильтрацию. Этот вопрос также может быть дубликатом; Я смотрел, но ничего подобного не нашел, однако есть много вопросов по Backbone


person Jay    schedule 05.02.2013    source источник


Ответы (1)


Возможно, я неправильно понимаю ваш вопрос, но вы можете делать именно то, что показываете. Ознакомьтесь с документацией по Backbone.

MyView = Backbone.View.extend({
    initialize: function() {
       this.collection.on("change:attributeName", this.someAction /*function to call*/, this);
    },
    someAction: function(model, value, options){
    }
});
person Paul Hoenecke    schedule 05.02.2013
comment
Дох! Я думаю ты прав! По какой-то причине я думал, что когда это коллекция, attributeName в change:attributeName относится к атрибуту коллекции, а не к модели. - person Jay; 06.02.2013
comment
хорошо, но как это сделать: this.collection.on(change,function(model,property){ //получить свойство, которое здесь было изменено... }); ??? - person Alexander Mills; 25.07.2015