那个设定
我有 Backbone.Marionette.ItemView 呈现一些内容。当呈现内容时,我想应用一个 jQuery 插件,它将视图的一部分变成带有滚动条的容器。
滚动条完全用 javascript 实现,初始化时它必须检查滚动容器的高度以及容器内内容的高度。
如果内容高于容器,则应启用滚动条。
问题
虽然这一切听起来很简单,但我遇到了一个奇怪的问题:
如果我直接在 onRender 回调中初始化我的滚动条插件,它似乎认为 .scroll-container 元素的高度为 0,maxHeight 为 0。
但是,如果我将初始化代码包装在 0ms 超时内,则一切正常,jQuery 正确返回 .scroll-container 元素的 height 属性,并且滚动条插件运行良好。
编码
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 超时的解决方案是否可靠?