在我的XPage中,我的脚本块中写有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");
});
如何避免这种情况?
答案 0 :(得分:5)
在不指定刷新ID的情况下进行部分刷新时,将刷新整个XPage。如果刷新UIViewRoot元素也会发生相同的情况。在这两种情况下,这都包括输出scriptblock,这就是你的addOnLoad事件被反复触发的原因。
寻呼机自动刷新其父组件。如果您的Pager刚刚添加到XPage中,它将始终刷新UIViewRoot。
要解决您的问题,您可以将dataTable和寻呼机嵌入xp:div元素中。另一个想法是,如果执行了部分刷新,则检查输出脚本块的呈现属性。
修改强> 以编程方式检查部分刷新(SSJS):
var ajax = new com.ibm.xsp.ajax.AjaxUtil();
if( ajax.isAjaxPartialRefresh(facesContext) == true){
return "AJAX";
}else{
return "NOT AJAX!"
}