部分刷新会触发XPage中的addOnLoad事件

Nav*_*een 1 javascript dojo xpages

在我的XPage中,我addOnLoad在脚本块中编写了一个.但问题是,即使在我不想要的部分刷新期间它也会发射.例如,如果我在数据表上有一个寻呼机控件,那么点击页面就会激活该addOnLoad功能.这发生在dojo.addOnLoadXSP.addOnLoad.

dojo.addOnLoad(function() {
    console.log("addOnLoad");
});
Run Code Online (Sandbox Code Playgroud)

每次进行部分刷新时,这将打印"addOnLoad".我甚至试图以这种方式修改代码,但没有运气.

var addOnLoadFired = false;
dojo.addOnLoad(function() {
    if (addOnLoadFired) {
        return;
    }
    addOnLoadFired = true;
    console.log("addOnLoad");
});
Run Code Online (Sandbox Code Playgroud)

如何避免这种情况?

Sve*_*ach 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!"
}
Run Code Online (Sandbox Code Playgroud)