2

У меня проблема с базовыми коллекциями. Я пытаюсь слушать все события по коллекции:Связывание с базой для добавления события в коллекцию

this.collection.on('all', function(ev) { 
    console.log(ev); 
    }); 

И коллекция инициирующее событие только тогда, когда я создаю запись так:

this.collection.create({name: 'aloha'}); 

Но не тогда, когда я создаю экземпляр модели непосредственно:

var room = new Room({name: 'hello'}); // this code not trigger any events on collection 
    room.save(); 

Я новичок в Backbone, но я думаю, что второй код должен инициировать событие. Может кто-нибудь мне помочь? Благодаря!

+1

вот пример и поиск определенной части. Коллекции моделей http://www.sinbadsoft.com/blog/backbone-js-by-example-part-1/ –

ответ

3

Событие не запускается в коллекции, поскольку модель room не связана (т. Е. Не добавлена) до this.collection.

Предполагая, что вы определили ваш model и collection подобное:

var Room = Backbone.Model.extend(); 

var Rooms = Backbone.Collection.extend({ 
    model:Room 
}); 

var rooms = new Rooms(); 

rooms.on('all',function(eventName) { 
    console.log(eventName); 
}); 

Для вашего кода, чтобы работать, как ожидается, вам придется add в room модели к rooms коллекции, такие как:

var room = new Room({'name':'hello'}); 

// This will trigger the add event on the collection 
rooms.add(room); 

// save the model 
room.save(); 

Ниже приведено короткое замыкание для вышеуказанного кодового блока:

var room = rooms.create({'name':'hello'}); 

Это FIDDLE, показывающее поведение.

+0

Большое спасибо за разъяснение. Просто не понимал, что модель не связана с коллекцией, только наоборот. Просто ожидайте, что он работает над сходством с ActiveRecord. Еще раз спасибо! – ssbb