设置
我有一个Backbone.Marionette.ItemView,它渲染一些内容。当内容被渲染时,我想应用一个jQuery插件,将视图的一部分变成带有滚动条的容器。
滚动条完全是用javascript实现的,在初始化时必须检查滚动容器的高度以及容器内部内容的高度。
如果内容高度大于容器高度,则应启用滚动条。
问题
虽然这听起来很简单,但我遇到了一个奇怪的问题:
如果我直接在onRender回调函数中初始化滚动条插件,它似乎认为.scroll-container元素的高度为0,最大高度为0。
但是,如果我将初始化代码包裹在0毫秒的超时函数中,一切都可以正常工作,jQuery正确返回.scroll-container元素的高度属性,滚动条插件也能正常工作。
代码
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毫秒的超时来解决这个问题是否可靠?
close
或remove
方法,当视图关闭时,DOM事件将自动清除。DOM事件的清理内置于Backbone.View的“remove”方法中。 - Derick Bailey