gpt4 book ai didi

javascript - 用于删除方法的 Rails 自定义 Twitter Bootstrap 模式,回调问题

转载 作者:行者123 更新时间:2023-11-29 22:29:50 27 4
gpt4 key购买 nike

以下代码确实按预期销毁了记录,但回调是从一个模式继承到下一个模式的。因此,当一条记录被正确删除时,Rails 一直在寻找删除以前删除的记录的方法。我使用的是 Twitter Bootstrap 模态窗口,它位于 Rails View 模板中,并在触发标准 Rails 删除方法时显示,取代了常规的 javascript 对话框。

如何在触发后清除回调?

$.rails.allowAction = function(element) {

var message = element.data('confirm'),
answer = false, callback;
if (!message) { return true; }

if ($.rails.fire(element, 'confirm')) {
myCustomConfirmBox(message, function() {
callback = $.rails.fire(element,
'confirm:complete', [answer]);
if(callback) {
var oldAllowAction = $.rails.allowAction;
$.rails.allowAction = function() { return true; };
element.trigger('click');
$.rails.allowAction = oldAllowAction;
}
});
}
return false;
}

function myCustomConfirmBox(message, callback) {
$('#dialog-confirm').modal('show');
$('#dialog-confirm button.primary').click(function(){
callback();
$('#dialog-confirm').modal('hide');
});
}

编辑:由于我对任何删除操作一遍又一遍地使用相同的基本模式,因此回调排队。因此,当删除操作之前已被取消时,它仍将在不同对象的另一个删除实例上触发,因为回调仍然有效。底线:如何清除回调队列?

最佳答案

事实证明,出于各种原因摆弄 native 删除方法/回调是一个坏主意。我的解决方案如下。

在你的 View 中有一个“删除”按钮,带有一些 JS 数据值:

#delete button in view template
link_to "delete", "#",
:class => "delete_post",
"data-id" => YOUR_POST_ID,
"data-controls-modal" => "YOUR_MODAL_LAYER",
#more bootstrap options here…

Bootstrap 打开模态窗口。在里面,有另一个带有“远程”设置的“删除”按钮,所以该操作将使用 JS。

#delete button in modal window
link_to "delete", post_path(0),
:method => :delete,
:class => "btn primary closeModal",
:remote => true

CloseModal 是另一个让我知道何时关闭 Bootstrap 模式窗口的 :class。我在我的 application.js 中为此添加了一个附加函数。注意,默认的 path 有一个 nil 值,我们将在下一步中通过“data-id”参数附加要通过 JS 删除的真实帖子 ID:

#application.js 
$('a.delete_post').live('click', function(){
_target = $(this).data('id');
$('#YOUR_MODAL_LAYER .primary').attr('href', '/posts/' + _target);
});

我们的帖子 Controller 中的销毁操作将使用 JS 为已删除的帖子呈现动画:

#posts_controller.rb
def destroy
@post = Post.find(params[:id])
@post.destroy
respond_to do |format|
# format.html { redirect_to(posts_url) }
format.js { render :content_type => 'text/javascript' }
end
end

请在此处插入效果。在此示例中,我们只是淡出已删除的帖子:

#views/posts/destroy.js    
$("div#post-<%= params[:id] %>").fadeOut();

总的来说,这工作真的很顺利!

关于javascript - 用于删除方法的 Rails 自定义 Twitter Bootstrap 模式,回调问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7569081/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com