Настройка
У меня есть Backbone.Marionette.ItemView, который отображает некоторый контент. Когда содержимое отображается, я хотел бы применить плагин jQuery, который превращает часть представления в контейнер с полосой прокрутки.
Полоса прокрутки полностью реализована в javascript, и при ее инициализации она должна проверять высоту контейнера прокрутки, а также содержимого содержимого внутри контейнера.
Если содержимое выше, чем контейнер, необходимо включить полосу прокрутки.
Проблема
Пока все звучит просто, у меня возникла странная проблема:
Если я инициализирую свой плагин прокрутки прямо в обратном вызове onRender, кажется, что элемент .scroll-container имеет высоту 0 и maxHeight 0.
Если я завершу код инициализации внутри тайм-аута 0ms, но все работает так, как должно, свойство высоты элемента .scroll-container вернулось jQuery правильно, и плагин плагина прокрутки отлично работает.
Код
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);
},
Вопрос
Я предполагаю, что проблема возникает, потому что браузер не закончил фактически рендеринг недавно вставленного html, когда выполняется обратный вызов onRender.
Правильно ли это предположение? И если да, то является ли мое решение использовать тайм-аут 0ms в обычных условиях?