我是一名最近进入 Javascript 世界的 Java 开发人员,如果我犯了一些愚蠢的错误或假设,请原谅我。我正在尝试将我们的本机浏览器/js“确认”对话框转换为主要使用主干框架开发的自定义模式。目前,这些模式不支持“确认”类型的功能。我认为主要问题是我的模态当前没有异步工作。
我有一个我正在调用的方法,它打开一个模式,我希望从调用中收到一个“真”或“假”值,这取决于用户点击了哪个按钮。但是,目前我的方法在显示模式后立即返回,并且不等待按钮单击。模态系统支持每个按钮的单独回调,可以在调用“openPortletModal”方法时定义,如下所示。但是,“confirmDiscard”方法返回一个未定义的值,而无需等待任何按钮调用。我的问题是,是否可以暂停方法的执行,直到进行回调?
在研究的过程中,我确实发现了一些关于 jQuery.Deferred 的信息,但我还没有找到一种明确的方法来利用它来获得我想要的功能,而且我看到的任何示例似乎都没有包含基于回调的不同返回值。
这是我的示例代码:
confirmDiscard: function(context) {
var deferred = new $.Deferred();
MyModal.openPortletModal(context, null, {
views: [{
name: "auth",
title: "Confirmation",
renderResponseData: "This is a test", //Message that modal renders
buttons: [{
type: "FINISH",
label: "OK",
click: function() {
console.log("CLICKED OK");
deferred.resolve("true"); //this is ultimately what I'd like to return from the confirmDialog() method
return false; //Modal system expects a "false" value from callback if there is no AJAX call to be made.
},
}, {
type: "CANCEL",
click: function() {
console.log("CLICKED CANCEL");
deferred.resolve("false");
return false;
},
}]
}]
});
deferred.done(function(value) {
alert(value); //This does get called on button click, but by now the confirmDiscard method has already returned.
return value;
})
return deferred.promise();
},
鉴于这种模式,javascript中有没有办法让这个方法在模态响应时等待?