1

在我的 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");
});

如何避免这种情况?

4

1 回答 1

5

在不指定刷新 ID 的情况下进行部分刷新时,将刷新整个 XPage。如果您刷新 UIViewRoot 元素,也会发生同样的情况。在这两种情况下,这都包括您的输出脚本块,这就是为什么您的 addOnLoad 事件会一次又一次地触发。

寻呼机自动刷新其父组件。如果您的 Pager 刚刚添加到 XPage,它将始终刷新 UIViewRoot。

要解决您的问题,您可以在 xp:div 元素中嵌入 dataTable 和寻呼机。另一个想法是在执行部分刷新时检查输出脚本块的渲染属性。

编辑: 以编程方式检查部分刷新(SSJS):

var ajax = new com.ibm.xsp.ajax.AjaxUtil();
if( ajax.isAjaxPartialRefresh(facesContext) == true){
    return "AJAX";
}else{
    return "NOT AJAX!"
}
于 2013-08-02T13:11:57.553 回答