javascript - 使用 AJAX 删除项目时如何重新加载 jQuery Masonry?

标签 javascript jquery ruby-on-rails ajax jquery-masonry

更新:

这是我的 CSS:

 #masonry-container {
   margin: 0 auto;
}

.box {
   width: 50%;
   margin-top: 30px;
}
<小时/>

我正在使用 Rails 4、Bootstrap 和 Masonry-Rails gem 。我有以下代码用于 jQuery Masonry 来排列我的 div,位于 asset/javascipts/application.js 中:

$(function(){
  $('#masonry-container').masonry({
    itemSelector: '.box',
    isFitWidth: true
  });
});

var masonryUpdate = function() {
    setTimeout(function() {
        $('#masonry-container').masonry();
    }, 200);
}

$(document).on('click', masonryUpdate);
$(document).ajaxComplete(masonryUpdate);

它以其他方式工作,但是当我尝试使用 AJAX 删除项目时,Masonry 不会更新。这是我的 View /projects/destroy.js:

$('.deleting').bind('ajax:success', function() {  
    $(this).closest('.poista').fadeOut();
});

在上面的代码示例之后,如何强制 Masonry 重新加载?由于某种原因 .ajaxComplete(masonryUpdate) 未触发?

如果我刷新页面,它会重新加载,但这消除了使用 AJAX 和销毁操作的意义...

为了进一步解释这一点,首先我的网站如下所示:

two columns of divs

但是当我删除一个 div 时,Masonry 不会重新加载;它最终看起来像这样,在 div 原来所在的位置有一个空白:

empty space where the div used to be

如何在 AJAX 销毁操作后重新加载 Masonry?

最佳答案

$('.deleting').bind('ajax:success', function() {  
    $ele = $(this).closest('.poista');
    $ele.fadeOut(200, function(){
          $("#masonry-container").masonry( 'remove', $ele ).masonry();
    });

});

关于javascript - 使用 AJAX 删除项目时如何重新加载 jQuery Masonry?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28480578/

相关文章:

javascript - jQuery - 如何为异步函数注册回调?

javascript - jQuery show-hide 远近查找下一个元素

javascript - 在原型(prototype)中的 $.ready 中使用 "this"

javascript - 我可以使用 JavaScript 以编程方式编辑数据源吗?

javascript - 我希望我的 youtube 视频总是从头开始播放,而不是从上次停止的地方播放

javascript - 使用 jQuery ajax 卸载 html 页面

javascript - 如何将css字符串转换为数组

ruby-on-rails - 从事件记录中的数据库中删除线程评论的有效方法是什么?

ruby-on-rails - 如何为 Rails 选择轻量级的 Gem?

ruby-on-rails - 如何在 Rails 3.2 中应用自动增量