如何在删除带有 AJAX 的项目时重新加载 jQuery Masonry?
How to reload jQuery Masonry, when deleting items with AJAX?
更新:
这是我的 CSS:
#masonry-container {
margin: 0 auto;
}
.box {
width: 50%;
margin-top: 30px;
}
我正在使用 Rails 4、Bootstrap 和 Masonry-Rails gem。我有以下代码为 jQuery Masonry 工作,以在 assets/javascipts/application.js 中安排我的 divs:
$(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 和销毁操作的意义...
为了进一步解释这一点,首先我的网站如下所示:
但是当我删除 div 时,Masonry 不会重新加载;它最终看起来像这样,在 div 曾经是的地方有一个空的 space:
如何在 AJAX 销毁操作后重新加载 Masonry?
您不必摧毁 Masonry,只需在 ajax 操作后重新初始化它并使用以下方法重新加载项目:
$container.masonry('reloadItems');
编辑
我正在查看您的 another question,我想我想出了一个更好的解决方案。您的问题实际上可能与以下行有关。
$(document).ajaxComplete(masonryUpdate);
因为 ajaxComplete
调用带有特定参数的设置处理函数 show here 你最好的选择是使用匿名函数来调用 masonryUpdate。
$(document).ajaxComplete(function(event, xhr, settings) {
masonryUpdate();
};
这意味着您不必 $('.deleting').bind
函数来处理删除。
旧
你实际上可以在你淡出一个项目后调用砌体
$('.deleting').bind('ajax:success', function() {
$(this).closest('.poista').fadeOut();
$('#masonry-container').masonry();
});
$('.deleting').bind('ajax:success', function() {
$ele = $(this).closest('.poista');
$ele.fadeOut(200, function(){
$("#masonry-container").masonry( 'remove', $ele ).masonry();
});
});
更新:
这是我的 CSS:
#masonry-container {
margin: 0 auto;
}
.box {
width: 50%;
margin-top: 30px;
}
我正在使用 Rails 4、Bootstrap 和 Masonry-Rails gem。我有以下代码为 jQuery Masonry 工作,以在 assets/javascipts/application.js 中安排我的 divs:
$(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 和销毁操作的意义...
为了进一步解释这一点,首先我的网站如下所示:
但是当我删除 div 时,Masonry 不会重新加载;它最终看起来像这样,在 div 曾经是的地方有一个空的 space:
如何在 AJAX 销毁操作后重新加载 Masonry?
您不必摧毁 Masonry,只需在 ajax 操作后重新初始化它并使用以下方法重新加载项目:
$container.masonry('reloadItems');
编辑
我正在查看您的 another question,我想我想出了一个更好的解决方案。您的问题实际上可能与以下行有关。
$(document).ajaxComplete(masonryUpdate);
因为 ajaxComplete
调用带有特定参数的设置处理函数 show here 你最好的选择是使用匿名函数来调用 masonryUpdate。
$(document).ajaxComplete(function(event, xhr, settings) {
masonryUpdate();
};
这意味着您不必 $('.deleting').bind
函数来处理删除。
旧
你实际上可以在你淡出一个项目后调用砌体
$('.deleting').bind('ajax:success', function() {
$(this).closest('.poista').fadeOut();
$('#masonry-container').masonry();
});
$('.deleting').bind('ajax:success', function() {
$ele = $(this).closest('.poista');
$ele.fadeOut(200, function(){
$("#masonry-container").masonry( 'remove', $ele ).masonry();
});
});