我使用Rails 4,Bootstrap和Masonry。我有以下代码用于jQuery Masonry来安排我的div,在application.js:
$(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();
});
在上面的代码示例之后,我怎么能强迫砌体重新加载?出于某种原因.ajaxComplete(masonryUpdate)没有被触发?
答案 0 :(得分:1)
从ajaxComplete上的jQuery Documentation看来,好像它没有对给定的参数执行函数调用,而是在Ajax请求完成时调用处理函数。
处理程序 类型:Function(事件事件,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);
}