2016-03-23 17 views
0

Ich bin neu in Backbone. Hier ist meine Frage. Ich habe eine Sammlung von Song-Liste und einen Index des aktuellen Play-Songs dieser Liste in der Sammlung. Der Code ist wie folgt:Wie binden Sie ein Ereignis an eine Basisvariable im Backbone?

var songCollection = Backbone.Collection.extend({ 
    initialize: function(){ 
     ... 
     this.index = 0; 
     ... 
    }, 
    ... 
    getNextSong:function(){ 
     ... 
     this.index++; 
     ... 
    } 

}) 

Und es gibt eine Ansicht, um den Inhalt des aktuellen spielenden Lieds zu zeigen. Ich möchte die Ansichtsinfo aktualisieren, wenn sich der aktuell wiedergegebene Titel ändert. Der aktuelle Code funktioniert nicht in der Ansicht.

var view = Backbone.View.extend({ 
    initialize:function(options){ 
     this.options.on('change:index', this.render, this); 

    } 
)} 

auch nicht

this.listenTo(...); 

Könnte jemand einen Ansatz sagen, diese zu lösen?

Antwort

0

"ändern: [Attribut]" (Modell, Wert, Optionen) - wenn ein bestimmtes Attribut wird aktualisiert - Events-catalog

ändern Ereignisse werden für Änderungen innerhalb Modelle attributes Hash ausgelöst, Ändern zufällige Eigenschaften einer Sammlung wird, soweit ich weiß, keine Ereignisse auslösen.

Sie sollten besser eine Flagge wie isPlaying in den Attributen des Modells haben, und listenTo es ist bei Sammlung in der Ansicht ändern.

var songModel = Backbone.Model.extend({ 
    defaults: { 
    isPlaying: false 
    } 
}); 
var songCollection = Backbone.Collection.extend({ 
    model: songModel 
}); 

var view = Backbone.View.extend({ 
    initialize: function(options) { 
    this.listenTo(this.collection, 'change:isPlaying', this.render); 
    }, 
    render: function(model, value, options) { 
    if(value){ 
    //---------------^ this is the playing song, render it 
    } 
    } 
}); 
Verwandte Themen