开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

基于Liferay的平台下,portlet在各个模式下分别加载以<footer-portlet-javascript>定义的js文件的不可行性

简介:
+关注继续查看

引入:

项目组问我,如果一个Portlet有多个模式(比如我们以前开发的某portlet同时有view模式和config模式),而我们前端用的extjs mvc的架构,并且主文件是main.js,这个main.js是用以下的<footer-portlet-javascript>定义在liferay-portlet.xml中,如下:

091752436.png

那么可能不可能让view.jsp(view模式的页面文件)和config.jsp(config模式的页面文件)分别加载2次main.js而不是共享同一个 main.js呢?


分析:

我仔细研究了一下,发现这是不可能做到的,以下是理由和我的想法。


首先,对于我们在iferay-portlet.xml中以这种方式定义的加载js文件,最终会被Liferay框架的PortletLocalServiceImpl的第1549-1551 行读取并且处理。

093259799.png

换句话说,我们这些所有的<footer-portlet-javascript>的配置,都会被框架读取并且加入到footerPortletJavaScriptList列表中。


那么这些列表中的js文件如何被使用呢?阅读Liferay源码,我们找到了,它原来在bottom_portlet_resources_js.jspf文件中,见第33行:

093422257.png

可以发现,它会读取刚才的footerPortletJavaScriptList,然后吧所有的资源文件路径解析为绝对路径,然后分别用<script src>的方式引入。


bottom_portlet_resource_js.jspf中会被bottom.jsp引入:

093520426.png


bottom.jsp会在init.vm364行被存入一个vm变量叫$bottom_include中:

093603252.png


$bottom_include会在我们的theme中的portal_normal.vm65行被引入:

093639932.png


总结:

因为我们一定会使用theme,无论使用默认的还是我们自定义的比如本例的platform_theme,不管哪一个,其中必定会包含portal_normal.vm,它会包含bottom.jsp,进而包含bottom_portlet_resources_js.jspf

而这个jspf页帧则包含了所有以footer-portlet-javascript形式给出的js资源文件。因为我们这个portal_normal.vm是项目框架级别的,所以只会解析一次,并且所有的页面都在这个框架中。

这就是为什么js资源只会加载一次的原因,而且无论是iframe,或者额外弹出页面,都在这个框架中,所以都会读到这些js文件,并且是相同的js文件。


从这个意义上说,我们让其分别引入js文件,并且都是main.js文件,并且都以footer-portlet-javascript给出的是不可行的,除非,这个js文件不定义在liferay-portlet.xml<footer-portlet-javascript>元素中





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1302437,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Javascript:谈谈JS的全局变量跟局部变量
[javascript] view plain copy &lt;script type="text/javascript"&gt;    var a = "Hello";    function test(){         var a;         alert(a);         a = "Wor
1252 0
+关注
20377
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载