簡體   English   中英

僅在其他功能的執行完全完成后,如何調用功能

[英]How to call function only after the executing of the other function is completly finished

在下面的代碼中, 僅在存儲了頁面屬性CQ.form.SlingSubmitAction(dialog.form, config); 之后 ,我才想使用功能siteAdmin.reloadPages()重新加載siteadmin頁面CQ.form.SlingSubmitAction(dialog.form, config); 成功執行。

以下函數提交表單,然后調用callback()函數,該函數反過來重新加載siteadmin頁面:

function foo(dialog, config, callback) {
    var action = new CQ.form.SlingSubmitAction(dialog.form, config);
    dialog.form.doAction(action);
    dialog[dialog.closeAction]();

    callback();
}

函數調用:

foo(dialog,action, function() {
    var siteAdmin = CQ.Ext.getCmp(window.CQ_SiteAdmin_id);
    siteAdmin.reloadPages();
});

問題是成功提交pageProperties( dialog.form )后,不會對siteadmin頁面進行更改。 例如,加載的pageTitle是舊值。

僅在成功提交表單后,如何重新加載siteadmin頁面?

您可以嘗試在配置中指定成功功能,如下所示。

function foo(dialog, config, callback) {
    var action = new CQ.form.SlingSubmitAction(dialog.form, {
        success: function(){
            var siteAdmin = CQ.Ext.getCmp(window.CQ_SiteAdmin_id);
            siteAdmin.reloadPages();
        }
    });
    dialog.form.doAction(action);
    dialog[dialog.closeAction]();
}

這樣可以確保僅在請求成功后才重新加載siteadmin。

此處檢查可用於您的配置的其他選項。

您應該從CQ.form.SlingSubmitAction的成功回調中調用foo的回調

function foo(dialog, config, callback) {
    var action = new CQ.form.SlingSubmitAction(dialog.form, 
       {
         params: config.params,
         success: function(frm, resp) {
           callback();
         }
       });
    dialog.form.doAction(action);
    dialog[dialog.closeAction]();
}

對於表單提交是否成功,我沒有任何測試。 您可以簡單地避免調用callback()函數,直到通過這樣的測試為止。 或者,您可以將測試放入callback()函數中,直到通過測試后才進行頁面重新加載。 或者,您可以估計將表單提交傳輸到Web服務器需要多長時間,以及服務器處理數據需要多長時間,然后執行以下操作:

 setTimeOut("callback();", 500); //wait 500 milliseconds (sample estimate)

要么

 setTimeOut("siteAdmin.reloadPages();", 500); //inside the callback() function

請注意,這假定提交的數據始終可以成功處理,但是使用setTimeout()無疑是一種確保在調用另一個函數之前完成一個函數的通用方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM