ну,
мы не можем быть уверены, что есть только модель1 и модель2, у нас могут быть модель3 и модель4, поэтому мы не можем фактически связываться с моделями вручную, в противном случае вы получитебольшой беспорядок, подобный этому:
// not an option... >> huge mess :)
model1.bind('add', myFunction());
model2.bind('add', myFunction());
model3.bind('add', myFunction());
так что вместо этого
мы могли бы реализовать агрегатор событий в нашем приложении.и вместо этого работаем с пользовательскими событиями.
// application object
var app = {
evt: _.extend({}, Backbone.Events);
};
// subcollection
var SubCollection = Backbone.Collection.extend({
initialize: function(){
_.bindAll(this, "bubbleEvent", "catchBubbledEvent");
this.bind('reset', this.myBubble);
this.bind('add', this.myBubble);
this.bind('reset', this.myBubble);
//... every event you want to catch
app.evt.bind('myCustomEvent', this.catchBubbledEvent);
},
bubbleEvent: function(x, y){
// triggering a general event, passing the parameters
app.evt.trigger('myCustomEvent', x, y, this);
},
catchBubbledEvent: function(x, y, originalCollection) {
// catch any event raised on the event aggregator and cancel out the loop (don't catch events raised by this very own collection :)
if(originalCollection.id === this.id)
return;
// do your stuff here ...
}
});
//model
var myModel = Backbone.Model.extend({
// notice me setting a unique ID in the collection, i pass in the client id of this instance of the model
subCollection: new SubCollection({id: this.cid});
});
, поэтому в основном мы перехватываем каждое событие коллекции, которое мы хотим, а затем передаем его в общее событие на отдельном агрегаторе событий, который мы имеем для всего нашего приложения,с этим может связываться все, что угодно, и делать что-либо, когда происходит соответствующее событие, так что наша коллекция может связываться с ним и делать что-то еще.поскольку возможно, что ваша коллекция отлавливает событие, которое она отправила сама, нам нужен небольшой тест, чтобы отменить эти ситуации ... и продолжить, только когда другая коллекция вызвала это событие.