Durandal Modal的回调

时间:2013-12-21 10:37:28

标签: javascript jquery durandal

我有一个自定义Durandal viewmodel,其方法为:

customModalNewMetric.show(someid);

在我的CustomModalNewMetric viewmodel中,方法如下所示:

CustomModalNewMetric.show = function(someid) {
        return dialog.show(new CustomModalNewMetric(someid));
};

dialog.show功能完成后如何执行某些功能?我想在显示对话框后执行一些jQuery。

2 个答案:

答案 0 :(得分:1)

Durandal的dialog.show()会返回promise,所以您需要做的就是:

CustomModalNewMetric.show = function(someid) {
    return dialog.show(new CustomModalNewMetric(someid)).then(function(data) {
    //callback function here (called after dialog is closed)
    //also will return any passed data
    });
}

注意:使用durandal时,请确保您拥有:

  • 使用requirejs
  • 定义了所有模块
  • 检查控制台中是否有任何错误。

编辑(2013年12月24日):

我遇到了this examplesource code说明了我提供的答案。

如果您有任何其他问题,请与我们联系!

答案 1 :(得分:0)

要在对话框打开后执行后续命令 ,看起来您需要做的是使用compositionComplete方法(DialogContext.compositionComplete)添加自己的对话框上下文。

您可以使用dialog.addContext方法添加新的上下文。

在这里,我粗略地修饰默认上下文并将其添加为'myContext'(可能有更优雅的方法):

dialog.addContext('myContext', {

  // Retain the behaviour of the original default context
  parentContext: dialog.getContext(),

  // Nothing but a passthrough to the parent context
  addHost: function(theDialog) {
    this.parentContext.addHost(theDialog);
  },
  removeHost: function(theDialog) {
    this.parentContext.removeHost(theDialog);
  },
  attached: function(view) {
    this.parentContext.attached(view);
  },

  // Here we do something different
  compositionComplete: function(child, parent, context) {
    this.compositionComplete(child, parent, context);
    // Do something now that the modal is open
    console.log('Modal opened');
  }
});

然后当您打开对话框时,您需要传递上下文名称:

dialog.show(new CustomModalNewMetric(someid), null, 'myContext');