2

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

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

[Примечание: Смотрите мой ответ ниже с кодом на основе ответа stusmith в]

ответ

1

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

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

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

+0

Спасибо. Я написал код для этого ответа ниже. – Undistraction

0

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

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 
},