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

时间:2015-02-13 09:00:37

标签: javascript jquery ajax

我使用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)没有被触发?

1 个答案:

答案 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);
}