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

Schreibe einen Kommentar