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