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

10-07 14:06
查看更多