繁体   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