Rails自定义Twitter引导模式删除方法,回调问题
Rails custom Twitter Bootstrap modal for delete method, Problem with callback
下面的代码按预期销毁记录,但是回调从一个模态继承到下一个模态。因此,当记录被正确删除时,Rails也会继续查找删除以前删除的记录。我正在使用Twitter Bootstrap模态窗口,它位于Rails视图模板中,并在触发标准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');
});
}
编辑:由于我对任何删除操作一遍又一遍地使用相同的基本模态,回调会排队。因此,当删除操作之前被取消时,它仍然会在不同对象的另一个删除实例上触发,因为回调仍然有效。底线:如何清除回调队列?
事实证明,由于各种原因,摆弄本机删除方法/回调是一个坏主意。我的变通方案如下:
在你的视图中有一个"删除"按钮,带有一些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打开模态窗口。在其中,设置另一个"delete"按钮并设置"remote",这样操作将使用JS。
#delete button in modal window
link_to "delete", post_path(0),
:method => :delete,
:class => "btn primary closeModal",
:remote => true
closemmodal 是我知道何时关闭引导模态窗口的另一个类。我在我的application.js中添加了一个额外的函数。注意,默认的路径有一个nil值,我们将在下一步中通过"data-id"参数附加要通过JS删除的真实post ID:
#application.js
$('a.delete_post').live('click', function(){
_target = $(this).data('id');
$('#YOUR_MODAL_LAYER .primary').attr('href', '/posts/' + _target);
});
post控制器中的destroy动作将使用JS为被删除的post渲染动画:
#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();
总的来说,这工作非常顺利!
相关文章:
- Google Data API上的OOP Javascript回调方法
- 有没有什么方法可以停止Jquery中的animate(也可以停止完整的回调函数)
- 对中的函数调用进行排序是回调的唯一方法
- Javascript:对回调创建的对象执行方法
- 如何向.apply()方法添加回调
- 在 Javascript 中实现解耦代码/回调的正确方法是什么?
- 一种在应用.appendTo()方法时使用回调函数的方法
- 与 promise 一起使用时,异步瀑布不执行下一个回调方法
- 从类方法中的 ajax post 函数回调函数更改 javascript 类属性
- 如何将回调函数添加到 .map 方法
- 传递promise回调方法的更好方法
- 将类方法绑定到类外绑定的事件处理程序内的AJAX成功回调
- 将方法作为回调传递
- Node.JS:类方法作为回调
- 将参数传递给 Ressource 的方法回调
- 从 javascript 对象方法回调中检索变量
- javascript设计模式-通过公共方法回调
- 如何在Nodejs中模拟外部依赖方法回调参数
- Javascript数组映射方法回调参数
- iCheck on()方法回调不起作用