如何在完成其他功能的执行后才调用函数

时间:2014-09-16 17:27:09

标签: javascript cq5

在以下代码中,我希望仅在成功执行页面属性siteAdmin.reloadPages()的存储之后,使用函数CQ.form.SlingSubmitAction(dialog.form, config); 重新加载siteadmin页面。

以下函数提交表单然后调用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页面?

3 个答案:

答案 0 :(得分:2)

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

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。

检查配置here的其他可用选项。

答案 1 :(得分:2)

你应该从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]();
}

答案 2 :(得分:-1)

我没有看到任何形式提交是否成功的测试。你可以简单地避免调用callback()函数,直到经过这样的测试。或者,您可以将测试放在callback()函数中,而不是在测试通过之后再进行页面重新加载。或者,您可以估计将表单提交传输到Web服务器所需的时间,以及服务器处理数据所需的时间,然后执行以下操作:

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

OR

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

请注意,这假设提交的数据始终处于成功处理状态,但使用setTimeout()肯定是确保一个函数为DONE的通用方法,然后再调用另一个函数。