16. 如何在XPages中实现onload效果及在新窗口中打开视图链接

国外的很多新闻和公司网站的链接都在当前窗口打开,这种文化上的差异也体现在XPages上。视图控件产生的链接都是在当前窗口打开。从8.5.2起,新增加了target属性,可以设置为_blank,在新窗口中打开链接,但是竟然只适用于Notes客户端。于是为了符合我国(或者是我)的习惯,就必须自己动手。

最直接的想法是在window.onload事件中找出视图包含的链接,修改它们的target属性。XPage有一个onClientLoad事件,不幸的是,这又只是为客户端准备的。还好如《14. 如何在XPages中插入HTML》所说,Javascript可以被包含在<script>标签里,插入XPage的源代码中。于是如下代码就完成了我们的任务:

<script language="Javascript">
XSP.addOnLoad(function () {
	openEntryInNewWin();
}
);
</script>

XPages在前端结合了dojo脚本库,并用XSP对象包装增强了dojo的一些功能。addOnLoad方法就将参数中的函数添加到window的onload事件中执行。函数openEntryInNewWin()也很简单:

function openEntryInNewWin(){
	dojo.query('.xspLinkViewColumn').attr('target', '_blank');
}

上面的函数使用dojo的query方法查找所有class属性为xspLinkViewColumn的元素,即视图控件产生的链接,再用attr方法修改它们的target属性。

不过问题还没结束。如果我们展现一个分类视图,或者翻页,XPages默认使用的是Ajax,即仅有视图部分被刷新,onload事件不会发生,因而新出现的链接仍将在当前窗口打开。于是我们必须在页面的afterRestoreView事件中添加以下代码。同时这又是《15. 如何在XPages中提示操作成功》中提到的view.postScript()方法的又一个用场。

<xp:this.afterRestoreView><![CDATA[#{javascript:view.postScript("openEntryInNewWin()")}]]></xp:this.afterRestoreView>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值