在以下代码中,我希望仅在成功执行页面属性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页面?
答案 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的通用方法,然后再调用另一个函数。