2014-10-07 3 views
2

Мы сталкиваемся с фундаментальной проблемой с базой: если я добавлю ту же модель к коллекциям A и B A.add() и B.add(), а затем удаляю ее из коллекции A с A.remove(), удаление события запускается на модели, которую производит сборка B, и поэтому модель также удаляется из коллекции B. Есть ли предпочтительный способ поведения по умолчанию? Нужно ли указывать {silent: true} каждый раз, когда мы манипулируем этими коллекциями, или есть лучший способ?Как удалить базовую модель из одной коллекции

Спасибо, -mykle-

+1

Не могли бы вы уточнить, что вы подразумеваете под _ «модель удаляется из коллекции B, а также» _? Ваш «удаляющий» «прослушиватель событий удаляет модель из коллекции B, или модель автоматически удаляется (без вашего действия)? – hindmost

ответ

0

Вам необходимо переопределить метод изменения вашей модели при его инициализации.

Ship = Backbone.Model.extend({ 
    defaults: { 
     name:'titanic', 
     cas: new Array() 
    }, 
    initialize: function() { 
     this.on('change:cas', this.notify, this); 
     this.on('change', this.notify, this); 
    }, 
    notify: function() { 
     console.log('cas changed'); 
    }, 
    notifyGeneral: function() { 
     console.log('general change'); 
    } 
}); 

Это хороший пример модели с двумя событиями изменения. Вам нужно будет проверить имя коллекции модели и изменить или не изменить соответствующим образом. Здесь, вы можете сделать что-то вроде этого:

initialize: function() { 
    this.on('change', this.notify, this); 
}, 
notify: function() { 

    console.log('cas changed'); 
    if(this.collection.id = 'CollectionB'){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

Вот хорошая ссылка:

Backbone.js : change not firing on model.change()

Смежные вопросы