等待对话消失的事件

时间:2014-08-08 16:23:42

标签: javascript jquery html knockout.js

在模式对话框中,我正在使用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调用。但是,我很难找到实现这一目标的解决方案。任何关于如何做到这一点的建议,或任何其他方法来实现我的最终目标,将不胜感激。干杯!

1 个答案:

答案 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实例方法时会立即触发此事件。