【发布时间】:2017-09-21 08:38:59
【问题描述】:
我正在使用 Handlebars http://handlebarsjs.com/ 和 Masonry https://masonry.desandro.com/ 获取一些 JSON 数据,并使用 Jquery prepend 每 5 分钟将其添加到 dom。
我遇到的问题是我第一次将数据添加到 dom Masonry 工作正常并水平显示
但是 5 分钟后,当新数据被添加时,它只是垂直下降。它应该预先添加和移动其他元素。
添加到 dom 的函数。
function AddToDom() {
console.log("AddToDom");
setTimeout(function() {
cardContainer.prepend(compiledCardTemplate(model)).masonry({
itemSelector: '.grid-item',
columnWidth: '.grid-item',
// percentPosition: true,
horizontalOrder: true,
fitWidth: true
});
}, 1000);
}
我使用 setTimeout 作为从检索数据到添加到 dom 的延迟。
编辑: 根据阿里的建议,我尝试了这个
function AddToDom() {
setTimeout(function() {
let $items = compiledCardTemplate(model);
cardContainer.append($items).masonry('prepended', $items);
}, 1000);
}
但我收到此错误
masonry not initialized. Cannot call methods, i.e. $().masonry("prepended")
编辑:为清楚起见
let cardContainer = $(".wrapper");
let cardTemplate = $("#card-template").html();
let compiledCardTemplate = Handlebars.compile(cardTemplate);
let model = {
posts: []
}
编辑:调用函数
// docuemnt init
$(document).ready(function () {
GetData();
AddToDom();
setInterval(AddToDom, 50000);
});
非常感谢任何帮助。
提前致谢。
【问题讨论】:
标签: javascript jquery html handlebars.js jquery-masonry