2016-06-26 13 views
0

I Backbone Sammlung und Sammlungsansicht mit Hörer haben:Prozess Backbone Sammlung abgerufenen Daten vor Ereignis Brennen

this.listenTo(this.collection, 'reset', this.render); 

Dann irgendwann ich dies tun:

myCollection.fetch({ 
    reset: true, 
    success: myCallback 
}) 

Was ich will, ist etwas zu tun Änderungen an den Modellen (vielleicht sogar Löschen oder Ersetzen von einigen) je nachdem, was auf der Seite passiert. Und ich möchte es tun vor Rendern der Ansicht. Derzeit versuche ich es in myCallback zu tun, aber sehen, dass es nach dem Rendern aufgerufen.

Wie kann ich abgeholte Daten vor irgendwelchen Ereignissen verarbeiten?

Antwort

1

Sie können das parse Methode der Sammlung der abgerufenen Antwort ändern, bevor die Ereignisse auslösen, wie:

Backbone.Collection.extend({ 
parse: function(response){ 
    // modify response here 
    return response; 
} 
}); 

oder aus irgendeinem Grund, wenn Sie auf den tatsächlichen modal Instanzen Code ausgeführt werden soll, nachdem Modelle dann erstellt werden, Sie können nur manuell aufrufen, wie anstelle des Ereignis-Listener machen:

myCollection.fetch({ 
    reset: true, 
    success: function(collection, response){ 
    // modify response here 
    view.render(); 
    } 
}) 

Oder einen anderen Rückruf haben, die die modalen manipuliert und dann Anrufe machen wie:

Backbone.View.extend({ 
    initialize: function(){ 
    this.listenTo(this.collection, 'reset', this.preRender); 
    }, 
    preRender: function(){ 
    // manipulate models here 
    this.render(); 
    }, 
    render: function(){ 
    // Actual rendering here 
    } 
}); 
+0

Ich denke, die zweite Lösung ist, was ich brauche. Aber ist es nicht besser, ein Ereignis zum Rendern auszulösen, anstatt den Link in der Sammlung zu speichern? –

+0

@DenisK. * "Link zur Ansicht innerhalb der Sammlung speichern" - Nein, mein zweites Beispiel geht davon aus, dass Sie 'myCollection.fetch ({' in der Ansicht oder ein Router, wo Sie einen Verweis auf sich selbst haben. Machen Sie keine Links In Model/Collections anzeigen Wenn Ihr Collection-Konstruktor Zugriff auf Collection-Instanzen wie 'myCollection' hat, stimmt etwas nicht mit dem Design ... Egal, ob Sie bei Events bleiben möchten, ich habe eine Alternative hinzugefügt. –