用AJAX删除项目后没有触发.ajaxComplete?

我正在使用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(); }); 

在上面的代码示例之后,我怎么能强迫砌体重新加载? 出于某种原因.ajaxComplete(masonryUpdate)未被触发?

从ajaxComplete上的jQuery Documentation看来,似乎它不对给定的参数执行函数调用,而是在Ajax请求完成时调用处理函数。

handler类型:Function(事件事件,jqXHR jqXHR,PlainObject ajaxOptions)要调用的函数。

您最好的选择是使用匿名函数来调用masonryUpdate

 $(document).ajaxComplete(function(event, xhr, settings) { masonryUpdate(); }; 

编辑

将您的砌体规格缓存在变量中可能更好。

 var mas = $('#pins').masonry({ itemSelector: '.box', isFitWidth: true }); 

然后你可以在那个变量上调用masonry

 var masonryUpdate = function() { setTimeout(function() { mas.masonry('reload'); }, 200); }