在我的 XPage 中,我在脚本 block 中编写了一个 addOnLoad
。但问题是它甚至在我不想要的部分刷新期间也会触发。例如如果我在数据表上有一个寻呼机控件,那么单击页面会触发 addOnLoad
函数。 dojo.addOnLoad
和 XSP.addOnLoad
都会发生这种情况。
dojo.addOnLoad(function() {
console.log("addOnLoad");
});
每次发生部分刷新时都会打印“addOnLoad”。我什至尝试以这种方式修改代码,但没有成功。
var addOnLoadFired = false;
dojo.addOnLoad(function() {
if (addOnLoadFired) {
return;
}
addOnLoadFired = true;
console.log("addOnLoad");
});
如何避免这种情况?
最佳答案
在不指定刷新 id 的情况下进行部分刷新时,将刷新整个 XPage。如果您刷新 UIViewRoot 元素,也会发生同样的情况。在这两种情况下,这都包括您的输出脚本 block ,这就是您的 addOnLoad 事件被一次又一次触发的原因。
分页器会自动刷新其父组件。如果您的 Pager 刚刚添加到您的 XPage,它总是会刷新 UIViewRoot。
要解决您的问题,您可以将数据表和寻呼机嵌入到 xp:div 元素中。另一个想法是在执行部分刷新时检查输出脚本 block 的渲染属性。
编辑: 以编程方式检查部分刷新 (SSJS):
var ajax = new com.ibm.xsp.ajax.AjaxUtil();
if( ajax.isAjaxPartialRefresh(facesContext) == true){
return "AJAX";
}else{
return "NOT AJAX!"
}
关于javascript - 部分刷新触发 XPage 中的 addOnLoad 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18009835/