2012-12-19 20 views
6

Ho una configurazione piuttosto semplice come questo:Backbone Collection.add non funziona

var MusicModel = Backbone.Model.extend({}); 
var PlaylistCollection = Backbone.Collection.extend({ 
    model: MusicModel, 
    events: {'add':'add'}, 
    add: function(mdl){ 
     //This is working perfectly fine even output of model 
     console.log(mdl); 
    } 
}); 

var playlistCollection = new PlaylistCollection(); 
playlistCollection.add(new Music(data)); 

il modello non è in realtà aggiunto alla collezione. Se provo a utilizzare la console di Chrome e inserisci playlistCollection.length, verrà emesso 0 e playlistCollection.models emetterà [].

Qualche idea su cosa sto facendo male?

risposta

7

Le raccolte in Backbone hanno già un add method. Scrivendo il tuo, maschera il metodo base e prevedi il comportamento normale: inserendo un modello nella collezione. Rinominare il metodo per qualcos'altro o chiamare il metodo di base per risolvere il problema:

var PlaylistCollection = Backbone.Collection.extend({ 
    model: MusicModel, 

    add: function(model, opts){ 
     Backbone.Collection.prototype.add.call(this, model, opts); 
     console.log(model); 
    } 
}); 

http://jsfiddle.net/nikoshr/WPrTu/

+0

Non so come potrei mancare qualcosa di simile. Accetterà tra cinque minuti. – ewooycom

+1

@ user1188570 In questi casi, do la colpa all'entusiasmo :) – nikoshr