gpt4 book ai didi

javascript - 使用 jQuery.Deferred 自定义 JS 确认模态以及基于按钮的返回值问题

转载 作者:行者123 更新时间:2023-11-28 08:57:35 26 4
gpt4 key购买 nike

我是一名 Java 开发人员,最近才进入 Javascript 世界,所以如果我犯了一些愚蠢的错误或假设,请原谅我。我正在尝试将我们的 native 浏览器/js“确认”对话框转换为主要使用主干框架开发的自定义模式。目前,这些模式不支持“确认”类型功能。我认为主要问题是我的模式当前没有异步工作。

我正在调用一个打开模式的方法,我希望从调用中收到“true”或“false”值,这取决于用户单击的按钮。但是,目前我的方法在模式显示后立即返回,并且不等待按钮单击。模态系统支持每个按钮的单独回调,可以在调用“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中有没有办法让这个方法在模态响应时等待?

最佳答案

我建议你采用与你类似的方式,但略有不同。希望对您有帮助。

cutomConfirm: function(text) {
var d, rendered, template,
_this = this;

template = $('#custom_confirm_temp');
rendered = $.tmpl($(template).template(), {
text: text || ''
});

$.blockUI({
message: rendered,
showOverlay: true,
onUnblock: function() {
return $(document).unbind('click');
},
css: {
width: '600px',
height: '150px',
opacity: '1',
border: '0',
backgroundColor: 'none'
}
});

d = $.Deferred();

rendered.find('#OK').click(function() {
$.unblockUI();
return d.resolve();
});

rendered.find('#CANCEL').click(function() {
$.unblockUI();
return d.reject();
});

return d;
}

您需要创建模板(id =“custom_confirm_temp”)并在需要时调用。

关于javascript - 使用 jQuery.Deferred 自定义 JS 确认模态以及基于按钮的返回值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18217063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com