Backbone.Marionette onRender-Rückruf wird ausgelöst, bevor die Ansicht im Browser gerendert wird?
Die Einstellung
Ich habe Rückgrat.Marionette.ItemView, das macht einige Inhalte. Wenn der Inhalt gerendert wird, würde ich gerne anwenden, ein jQuery-plugin, das sich ein Teil der Sicht in einem container mit scrollbar.
Scrollbar ist vollständig implementiert in javascript und der bei der Initialisierung es ist zu prüfen, die Höhe des scroll-container als auch, dass der Inhalt in den container.
Wenn der Inhalt größer als der container, scrollbar aktiviert werden soll.
Das problem
Während dies alles klingt einfach, habe ich lief in ein seltsames problem:
Wenn Initialisiere ich meine scrollbar plugin direkt in die onRender-callback-scheint es zu denken .scroll-container-element hat eine Höhe 0 und maxHeight 0.
Wenn ich wickeln Sie die Initialisierung code in einem 0ms timeout obwohl, alles funktioniert wie es sollte, die .scroll-container-element height-Eigenschaft zurückgegeben wird, indem Sie jQuery richtig und die scrollbar plugin funktioniert Super.
Den code
onRender: function() {
var that = this;
setTimeout(function() {
that.onLayout();
var $scrollContainer = that.$el.find('.scroll-container'),
scrollPane = new ScrollPane($scrollContainer, {
maxHeightProperty: 'maxHeight',
scrollUpButton: false,
scrollDownButton: false
});
}, 0);
},
Die Frage
Habe ich vorausgesetzt, das problem tritt auf, weil der browser nicht fertig, tatsächlich Rendern der neu eingefügte html, wenn der onRender-callback.
Ist diese Annahme korrekt? Und wenn dem so ist, ist meine Lösung mit einem 0ms timeout zuverlässig unter normalen Umständen?
InformationsquelleAutor der Frage Ruben Ray Vreeken | 2012-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da das plugin in Frage, hängt von der DOM
onRender
nicht tun, was Sie brauchen. Dieser Rückruf startet, nachdem die view gerendert wurde, aber es gibt keine Garantie, dass die Ansichtel
wurde Hinzugefügt, um den DOM noch. In der Tat, Sie werden sicher das Gegenteil annehmen -, dass es nicht Hinzugefügt wurde noch.Wenn du mit einer Marionette
Region
zu zeigen, die anzeigen, die Sie implementieren können, einonShow
Methode in Ihrem Blick. Diese Methode wird aufgerufen, indem Sie die region, nach region Hinzugefügt hat, den Blick auf den DOM. Es wurde umgesetzt, die speziell zum verarbeiten dieser situation.Für ein wenig mehr info auf diesen, und auf die Arbeit mit jQuery-plugins im Allgemeinen finden Sie in diesem blog-post: http://lostechies.com/derickbailey/2012/02/20/using-jquery-plugins-and-ui-controls-with-backbone/
InformationsquelleAutor der Antwort Derick Bailey