Javascript 部分刷新在XPage中触发addOnLoad事件
在我的XPage中,我在脚本块中编写了一个Javascript 部分刷新在XPage中触发addOnLoad事件,javascript,dojo,xpages,Javascript,Dojo,Xpages,在我的XPage中,我在脚本块中编写了一个addOnLoad。但问题是,即使在我不希望的部分刷新期间,它也会触发。例如,如果我在数据表上有一个寻呼机控件,那么点击页面就会触发addOnLoad功能。这在dojo.addOnLoad和XSP.addOnLoad中都会发生 dojo.addOnLoad(function() { console.log("addOnLoad"); }); 这将在每次部分刷新时打印“addOnLoad”。我甚至试图用这种方式修改代码,但没有成功 var add
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");
});
如何避免这种情况?在不指定刷新id的情况下执行部分刷新时,将刷新整个XPage。如果刷新UIViewRoot元素,也会发生同样的情况。在这两种情况下,这都包括输出scriptblock,这就是addOnLoad事件被反复激发的原因 寻呼机自动刷新其父组件。如果您的寻呼机刚刚添加到XPage,它将始终刷新UIViewRoot 为了解决问题,可以将dataTable和寻呼机嵌入到xp:div元素中。另一种方法是在执行部分刷新时检入输出脚本块的rendered属性 编辑: 以编程方式检查部分刷新(SSJS):
在不指定刷新id的情况下执行部分刷新时,将刷新整个XPage。如果刷新UIViewRoot元素,也会发生同样的情况。在这两种情况下,这都包括输出scriptblock,这就是addOnLoad事件被反复激发的原因 寻呼机自动刷新其父组件。如果您的寻呼机刚刚添加到XPage,它将始终刷新UIViewRoot 为了解决问题,可以将dataTable和寻呼机嵌入到xp:div元素中。另一种方法是在执行部分刷新时检入输出脚本块的rendered属性 编辑: 以编程方式检查部分刷新(SSJS):
将脚本块移出部分刷新的区域。我不认为这是原因。我举的例子是,我创建了一个数据表和一个与之关联的寻呼机控件。使用寻呼机控件在页面之间切换时,执行
addOnLoad
。并且脚本块不驻留在数据表中。Hack解决方案:当代码第一次运行时,在运行代码之前,向viewScope写入一些内容并进行检查?@AaronBrake:但是viewScope
是SSJS,我的代码是客户端JavaScript。可以在隐藏字段中写入一个值并进行检查。将脚本块移出部分刷新的区域。我不认为这是原因。我举的例子是,我创建了一个数据表和一个与之关联的寻呼机控件。使用寻呼机控件在页面之间切换时,执行addOnLoad
。并且脚本块不驻留在数据表中。Hack解决方案:当代码第一次运行时,在运行代码之前,向viewScope写入一些内容并进行检查?@AaronBrake:但是viewScope
是SSJS,而我的代码是客户端JavaScript。然后可以将值写入隐藏字段并进行检查。将我的数据表和寻呼机嵌入
中不起作用。我将如何在rendered
属性中检查页面是否已部分刷新?刷新后,您可以在Firebug或IE/Chrome中的其他开发人员工具“查看网络”部分中看到它。对于部分刷新的组件,响应包含整个页面(完全刷新)或只是html的一部分。这就是我的评论:如果您将脚本移出刷新的html,它将不会运行。正如斯文所指出的,您似乎已经完全刷新了。@Naveen:更新了我的答案。@Naveen:您设置了div的id了吗?@SvenHasselbach:我设置了
的id,结果成功了。非常感谢!:)在
中嵌入我的数据表和寻呼机不起作用。我将如何在rendered
属性中检查页面是否已部分刷新?刷新后,您可以在Firebug或IE/Chrome中的其他开发人员工具“查看网络”部分中看到它。对于部分刷新的组件,响应包含整个页面(完全刷新)或只是html的一部分。这就是我的评论:如果您将脚本移出刷新的html,它将不会运行。正如斯文所指出的,您似乎已经完全刷新了。@Naveen:更新了我的答案。@Naveen:您设置了div的id了吗?@SvenHasselbach:我设置了
的id,结果成功了。非常感谢!:)
var ajax = new com.ibm.xsp.ajax.AjaxUtil();
if( ajax.isAjaxPartialRefresh(facesContext) == true){
return "AJAX";
}else{
return "NOT AJAX!"
}