重新加载时 justifiedGallery 中断
justifiedGallery break when reloaded
我正在为我的网页使用 justifiedGallery。当我第一次访问该页面时,图库会正确显示。但是当我重新加载页面时,它会中断。
我正在使用 meteor 和 react。
旧代码示例:
$(document).ready(() => {
$('#gallery').justifiedGallery({
rowHeight: 400,
fixedHeight: false,
lastRow: 'justify',
margins: -3,
});
});
我已将其放入 jQuery setTimeOut() 函数。
setTimeout(function(){
$('#gallery').justifiedGallery({
rowHeight: 400,
fixedHeight: false,
lastRow: 'justify',
margins: -3,
});
}, 100);
现在一切正常。我只需要知道这是修复它的正确方法吗?这是为了将来的证明。
你永远不应该 运行 像那样全局操作 DOM 的代码。您得到的是实际模板呈现的竞争条件。这有时会随机工作,有时随机不会,并且总是 运行 与模板引擎发生冲突,这最多会阻碍应用程序的性能。
将画廊创建移动到 Template.onRendered()
方法并使用 this.$('.gallery')
而不是 $('#gallery')
。如果您使用的是 React,则等效位置是包含 .gallery
div.
的演示组件的 componentDidMount
方法
旁注:不要使用 id 进行元素选择,使用 类 或数据属性。 ID 是一种不好的做法,因为您创建的组件不可重用并且可能存在性能问题。
我正在为我的网页使用 justifiedGallery。当我第一次访问该页面时,图库会正确显示。但是当我重新加载页面时,它会中断。
我正在使用 meteor 和 react。
旧代码示例:
$(document).ready(() => {
$('#gallery').justifiedGallery({
rowHeight: 400,
fixedHeight: false,
lastRow: 'justify',
margins: -3,
});
});
我已将其放入 jQuery setTimeOut() 函数。
setTimeout(function(){
$('#gallery').justifiedGallery({
rowHeight: 400,
fixedHeight: false,
lastRow: 'justify',
margins: -3,
});
}, 100);
现在一切正常。我只需要知道这是修复它的正确方法吗?这是为了将来的证明。
你永远不应该 运行 像那样全局操作 DOM 的代码。您得到的是实际模板呈现的竞争条件。这有时会随机工作,有时随机不会,并且总是 运行 与模板引擎发生冲突,这最多会阻碍应用程序的性能。
将画廊创建移动到 Template.onRendered()
方法并使用 this.$('.gallery')
而不是 $('#gallery')
。如果您使用的是 React,则等效位置是包含 .gallery
div.
componentDidMount
方法
旁注:不要使用 id 进行元素选择,使用 类 或数据属性。 ID 是一种不好的做法,因为您创建的组件不可重用并且可能存在性能问题。