我有一個jq替換標準確認對話框。jQuery包裝推遲和承諾
我允許用戶傳入一個函數,如果用戶點擊確定就會被調用。
傳入的函數可能會調用像ajax調用一樣的長時間運行異步任務,有時候不會,我想迎合這兩者。
我用這個解決方案爲基礎(https://stackoverflow.com/a/19374933)
我想實現的是這樣的:
MyConfirmation('A Title', 'A message to the user', function() {
$.get('/some/bigdata/longrunning');
}
).then(function() {
// add to dom here
});
這是MyConfirmation:
MyConfirmation = function (title, message, ok) {
var d = $.Deferred();
$('<div/>')
.text(message)
.dialog({
buttons: {
"Ok": function() {
if($.isFunction(ok)) {
ok.apply();
}
$(this).dialog("close");
d.resolve(true);
return true;
},
"Cancel": function() {
$(this).dialog("close");
d.resolve(false);
return false;
}
},
close: function(event, ui) {
$(this).remove();
},
resizable: false,
draggable: false,
width: 'auto',
title: title,
modal: true
});
return d.promise();
};
我想最好結合我的延期返回真或假,以指示用戶點擊確定或取消。
我知道我可以使用的承諾中,.done方法從$不用彷徨返回,但我會怎麼做我的解決方案的工作
我是**只是**將我自己的答案標記爲接受,然後閱讀這個更優雅的解決方案。另外我也從中學到了一些東西。謝謝。 –