次のコードは意図したとおりにレコードを破棄しますが、コールバックはあるモーダルから次のモーダルに継承されます。そのため、レコードが適切に削除されている間、Rails は以前に削除されたレコードも削除しようとします。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');
});
}
編集:削除アクションに同じ基本モーダルを何度も使用しているため、コールバックがキューに入れられます。そのため、削除アクションが以前にキャンセルされた場合でも、コールバックがまだ有効であるため、別のオブジェクトの別の削除インスタンスでトリガーされます。結論: コールバック キューをクリアする方法は?