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

标签 javascript dojo xpages

在我的 XPage 中,我在脚本 block 中编写了一个 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");
});

如何避免这种情况?

最佳答案

在不指定刷新 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/

相关文章:

javascript - 如何检查下拉列表是否为只读?

javascript - 如何使用 Stylus CSS 生成随机颜色?

javascript - 理解 JavaScript 的 THIS 关键字

javascript - 执行列排序后 dgrid 无法保留滚动位置

javascript - Dojo DataGrid (DGrid) 添加复选框列

java - 修复 "ExtLibUtil cannot be resolved"问题

java - 将 Notes 字段转换为 JsonJavaArray

javascript - 如何让 ZeroClipboard 只需单击一下即可工作?

php - 将 php 数组传递给 javascript

javascript - 如何销毁小部件同时保留它所附加的根节点?