Aufruf von Javascript beim Rendern von Ansichten in BackBone js. Rückruf nach dem Rendern?
siehe, eine backbone-view-render-Aufruf:
render: function() {
$(this.el).html(this.template({title: 'test'})); //#1
this.renderScatterChart();
return this;
},
so, ich nenne ein standard-render-in #1. und dann rufe ich eine Methode [diese Zeit, es ist ein wrapper für die charting-lib] das sieht für div. das div-Element gerendert, indem die render-Aufruf. aber an diesem Punkt, es ist nicht angebracht den DOM noch (richtig?). also das Diagramm, rufen Sie leider stirbt.
was ist das Muster? ich würde gerne hören, dass es eine post-render callback. ich habe versucht, ein paar hacks zu umgehen, und manchmal bekomme ich den chart zu arbeiten, aber die Ereignisse nicht zu binden.
InformationsquelleAutor der Frage whatbird | 2012-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mein üblichen Ansatz für diese Art der Sache ist zu verwenden
setTimeout
mit einem timeout von null zu arrangieren, damit etwas passiert sobald der browser erhält wieder die Kontrolle. Versuchen Sie dies:Oder, wenn
renderScatterChart
ist bereits gebunden, um die entsprechendenthis
:Können Sie auch
_.aufschieben
wenn Sie wollen mehr explizit über das, was Sie sind:So könnte man auch es so machen:
InformationsquelleAutor der Antwort mu is too short
Ich weiß, das beantwortet ist, aber dachte ich würde teilen. Underscore js hat dieses deckte für Sie mit _.verschieben-Funktion.
Gemäß der Unterstrich docs, ist dies effektiv dasselbe wie die akzeptierte Lösung.
InformationsquelleAutor der Antwort Xesued
Ist es, weil Sie ausführen, Rendern, bevor .el ist eingefügt in die DOM. Überprüfen Sie meine selbsterklärender code(run-in eine leere Seite mit Backbone.js im Lieferumfang enthalten):
InformationsquelleAutor der Antwort Daniel Aranda
Können Sie einfach diesen (wenn renderSactterChart arbeitet auf einer 'jQuery-ized' - Objekt):
(dies ist nicht der eigentliche DOM-element...)
InformationsquelleAutor der Antwort Andy
Hatte das gleiche problem wie du...habe mit highcharts. Ich war mit Rückgrat.LayoutManager, und am Ende hacken Sie den code zum hinzufügen einer postRender callback. Würde gerne sehen, diese als Teil Backbone.js
InformationsquelleAutor der Antwort Shreyas
Wenn Sie nicht wollen, verwenden Sie die
setTimeout
hack, ich denke, dass dieser Weg mehr 'normal':Einfach die $el-element auf die Funktion, Bedürfnisse zu manipulieren, um Elemente ergänzt, die von
render()
und dann DOM-manipulation durchgeführt werden kann $el.InformationsquelleAutor der Antwort dotslashlu
Gut dies wurde bereits beantwortet, aber für zukünftige Referenz, ich habe dieses problem schon ein paar mal. Ich löste es durch hinzufügen benutzerdefinierte Ereignisse, in diesem Fall könnte es so etwas wie
Dann, wenn ich anfügen, das element an den DOM, ich auslösen, wie
Nun, es ist sicherlich keine schöne Lösung. Fügen Sie die Mitteilungspflicht auslösen dieses Ereignisses auf das, was ist, indem der gerenderten Ansicht auf den DOM. Je nachdem, wie Ihr code ist strukturiert, es passt besser oder schlechter. Wieder bin ich gerade dieses posting als zukünftige Referenz-und alternative.
Mehr info: http://backbonejs.org/#Events
InformationsquelleAutor der Antwort julioolvr
Sollte dies in etwa so:
Beispiel mit der marionette aber die Idee funktioniert für backbone-Ansichten sowie
InformationsquelleAutor der Antwort user2846569