我有一个自定义Durandal viewmodel,其方法为:
customModalNewMetric.show(someid);
在我的CustomModalNewMetric
viewmodel中,方法如下所示:
CustomModalNewMetric.show = function(someid) {
return dialog.show(new CustomModalNewMetric(someid));
};
dialog.show
功能完成后如何执行某些功能?我想在显示对话框后执行一些jQuery。
答案 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时,请确保您拥有:
编辑(2013年12月24日):
我遇到了this example,source 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');