2013-03-24 15 views
18

Dies ist meiner Ansicht nach für eine SammlungBackbone-Sammlung holen nicht zurückgesetzt Feuer()

var mssg = mssg || {}; 

mssg.MessagesView = Backbone.View.extend({ 

el: '#messages', 

initialize: function() { 
    this.collection.fetch(); 
    this.collection.bind('reset', this.render, this); 
}, 

render : function() { 
    this.$el.html(''); 
    this.collection.each(function(item) { 
     this.renderMessage(item); 
    }, this); 
    return this; 
}, 

renderMessage : function(item) { 
    var messageView = new mssg.MessageView({ 
     model : item 
    }); 
    this.$el.append(messageView.render().el); 
} 

}); 

dies ist die Sammlung

var mssg = mssg || {}; 

mssg.Messages = Backbone.Collection.extend({ 
    model : mssg.Message, 
    url : 'messages' 
}); 

und dies ist, wie es initialisiert wird:

var mssg = mssg || {}; 

$(function() { 
    new mssg.MessagesView({ 
     collection : new mssg.Messages() 
    }); 
}); 

Das Problem ist, dass die render Funktion gebunden an reset nicht nach der Ajax Abrufanforderung ausgelöst wird.

Wenn ich es an add binden, funktioniert es. Ich versuchte, all an eine Debugging-Funktion zu binden, und es heißt, dass das Ereignis sync neben dem add für jedes Element aufgerufen wird.

+2

Könnten Sie this.collection.fetch versuchen ({reset: true})? – nikoshr

+0

@nikoshr danke das hat funktioniert! Ich dachte, es wäre impliziert, dass? –

Antwort

33

Wenn Sie Rückgrat überprüfen change log, sehen Sie, dass die Art und Weise holen wird in 1,0 handled geändert:

Renamed Collection "update" zu setzen, für die Parallelität mit dem ähnlichen model.set(), und Kontrast zum Zurücksetzen. Es ist jetzt der Standard-Update-Mechanismus nach einem Abruf. Wenn Sie möchten, mit "Reset", um fortzufahren, übergeben {reset: true}

Also, ein Reset-Ereignis auszulösen, haben Sie jetzt

this.collection.fetch({reset: true}) 
+0

cool danke, es ist eine neue App, also habe ich einfach auf den neuen Standard ('set') umgeschaltet –

0

in Backbone 1.0 zu verwenden, müssen Sie Reset auslösen von Hand:

youColloection.fetch({reset: true});