`
从此醉
  • 浏览: 1049223 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

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>


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics