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

时间:2013-08-02 06:08:05

标签: javascript dojo xpages

在我的XPage中,我的脚本块中写有addOnLoad。但问题是即使在我不想要的部分刷新期间也会发生火灾。对于例如如果我在数据表上有一个寻呼机控件,那么点击页面会激活addOnLoad功能。 dojo.addOnLoadXSP.addOnLoad都会发生这种情况。

dojo.addOnLoad(function() {
    console.log("addOnLoad");
});

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

var addOnLoadFired = false;
dojo.addOnLoad(function() {
    if (addOnLoadFired) {
        return;
    }
    addOnLoadFired = true;
    console.log("addOnLoad");
});

如何避免这种情况?

1 个答案:

答案 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!"
}