我有Backbone.Marionette.ItemView呈现一些内容。呈现内容时,我想应用一个jQuery插件,它将部分视图转换为带滚动条的容器。
滚动条完全用javascript实现,初始化时必须检查滚动容器的高度以及容器内容的高度。
如果内容高于容器,则应启用滚动条。
虽然这听起来很简单,但我遇到了一个奇怪的问题:
如果我直接在onRender回调中初始化我的滚动条插件,似乎认为.scroll-container元素的高度为0,maxHeight为0。
如果我将初始化代码包装在0ms超时范围内,一切正常,jscse-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);
},
我假设问题发生是因为浏览器在执行onRender回调时没有完成实际呈现新插入的html。
这个假设是否正确?如果是这样,我在正常情况下使用0ms超时的解决方案是否可靠?
答案 0 :(得分:41)
由于有问题的插件取决于DOM,onRender
将无法满足您的需求。渲染视图后,此回调会启动,但无法保证视图的el
已添加到DOM中。事实上,你可以安全地假设相反 - 它尚未被添加。
如果您使用木偶Region
来显示视图,则可以在视图中实施onShow
方法。在区域将视图添加到DOM之后,该方法将由区域调用。它专门用于处理这种情况。
有关此内容的更多信息,以及一般使用jQuery插件的信息,请参阅此博文:http://lostechies.com/derickbailey/2012/02/20/using-jquery-plugins-and-ui-controls-with-backbone/