在模式对话框中,我正在使用Knockout.js,"提交"按钮触发一个方法,该方法应隐藏对话框,然后设置变量的值。
self.updateSubTask = function(subTask) {
...
$('#subTaskDialog').modal('hide');
self.selectedSubTask(null);
};
调用此函数时,隐藏进程开始 - 对话框本身被删除 - 但在完成之前停止,灰色背景将无限期地持续存在。经过一些调查后,很可能这是因为后续调用设置self.selectedSubTask
的值会破坏hide" animation"。不幸的是,由于对话框的设置方式,必须在更改为selectedSubTask
之前进行模态调用。我尝试过以下方法:
_.defer(function() { self.selectedSubTask(null); })
$('#subTaskDialog').queue(function() { self.selectedSubTask(null); });
不幸的是,这些方法都不起作用,行为也是一样的。
我认为合理的操作方法是在隐藏对话框时监听,并在该事件处理程序中包含selectedSubTask
调用。但是,我很难找到实现这一目标的解决方案。任何关于如何做到这一点的建议,或任何其他方法来实现我的最终目标,将不胜感激。干杯!
答案 0 :(得分:1)
只需将函数绑定到隐藏模态的事件(此事件称为hidden.bs.modal
):
self.updateSubTask = function(subTask) {
$('#subTaskDialog').modal('hide');
// capture the modal's "hidden" event
$( "#subTaskDialog" ).on('hidden.bs.modal', function(){
self.selectedSubTask(null);
});
};
来自hidden.bs.modal
上的Bootstrap文档:
当模态完成对用户的隐藏时将触发此事件(将等待CSS转换完成)。
还有一个hide.bs.modal
事件,以便更好地满足您所需的功能。从Bootstrap文档:
调用hide实例方法时会立即触发此事件。