Как Backbone.js View узнает, когда его коллекция изменилась? - PullRequest
2 голосов
/ 30 марта 2012

У меня есть Backbone View, в котором Модель является Коллекцией.Если коллекция передается через конструктор, она может добавить слушателей в коллекцию в своей функции инициализации, но как узнать, когда ее коллекция установлена ​​после построения, чтобы она могла прослушивать события из коллекции?

Я хочу иметь возможность изменять свою коллекцию в течение ее жизненного цикла и выполнять ее повторную визуализацию на основе данных в новой коллекции, но, похоже, нет способа узнать, когда ее коллекция изменилась?Доступны ли какие-либо крючки?

[Примечание: см. Мой ответ ниже с кодом, основанным на ответе Стусмита]

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Не думаю, что существует какой-либо автоматический способ узнать - collection - это просто обычное свойство.

Вместо этого вы всегда можете предоставить функцию setCollection, которая отменяет привязку событий из старой коллекции (если есть), присваивает коллекцию и привязывает к новой.

Для ясности, вы также можете вызвать эту функцию из initialize.

0 голосов
/ 30 марта 2012

Вот мое решение, основанное на ответе Стусмита:

initialize: function(){
    if(this.collection){
                this.addCollectionListeners();
        }
},

setCollection:function(collection){
    if(collection != this.collection){
        if(this.collection){
            this.removeCollectionListeners();
        }
        this.collection = collection;
        this.addCollectionListeners();
    }
},

removeCollectionListeners:function(){
    //Remove listeners
},


addCollectionListeners:function(){
    //Add listeners
},
...