我正在使用Rails 4,Bootstrap和Masonry。我有以下代码可用于jQuery Masonry以在application.js中安排我的div:
$(function(){
$('#pins').masonry({
itemSelector: '.box',
isFitWidth: true
});
});
var masonryUpdate = function() {
setTimeout(function() {
$('#pins').masonry();
}, 200);
}
$(document).on('click', masonryUpdate);
$(document).ajaxComplete(masonryUpdate);
否则它会起作用,但是当我尝试使用AJAX删除项目时,Masonry不会更新。这是我的destroy.js:
$('.deleting').bind('ajax:success', function() {
$(this).closest('.poista').fadeOut();
});
在上面的代码示例之后,我该如何强制Masonry重新加载?由于某种原因,未触发.ajaxComplete(masonryUpdate)?
最佳答案
从ajaxComplete上的jQuery Documentation看来,它似乎不对给定参数执行函数调用,而是在Ajax请求完成时调用处理程序函数。
处理程序
类型:函数(事件事件,jqXHR jqXHR,PlainObject ajaxOptions)
要调用的功能。
最好的选择是使用匿名函数来调用masonryUpdate
。
$(document).ajaxComplete(function(event, xhr, settings) {
masonryUpdate();
};
编辑
将砌筑规范缓存在一个变量中可能会更好。
var mas = $('#pins').masonry({
itemSelector: '.box',
isFitWidth: true
});
然后可以在该变量上调用砌体
var masonryUpdate = function() {
setTimeout(function() {
mas.masonry('reload');
}, 200);
}