Liferay 从Dockbar 添加Portlet的事件细节研究

Part 1: 从页面点击"Add"过程找出事件处理函数:

在Liferay中,当我们从左边选择一个Portlet并且添加的时候,会触发一系列的动作,并且最终把这个Portlet显示在页面上,现在我们就对这个神秘的过程进行窥测。

在页面上,为了找到我们点击Add之后绑定的事件处理函数,我们先找到这段代码对应的jsp页面在/html/portlet/layout_configuration/view_category.jsp中:

<div
    class="lfr-portlet-item lfr-archived-setup"
    id="<portlet:namespace />portletItem<%= portletItem.getPortletItemId() %>"
    instanceable="<%= portletInstanceable %>"
    plid="<%= plid %>"
    portletId="<%= portlet.getPortletId() %>"
    portletItemId="<%= portletItem.getPortletItemId() %>"
    title="<%= HtmlUtil.escape(portletItem.getName()) %>"
>
    <p><%= HtmlUtil.escape(portletItem.getName()) %> <a href="javascript:;"><liferay-ui:message key="add" /></a></p>
</div>

因为昨天我们研究过,这个文本任意变动都不会影响到添加Portlet事件的触发(参见http://supercharles888.blog.51cto.com/609344/908773)文章,所以我们确定点击事件和显示内容无关,而页面上除了这个文本以外任何地方点击都无效(不触发添加Portlet事件),由此看来,我们的事件最终是绑定到<a>元素的,因为这是它唯一和其他部分不同的地方。

最终,我们在/html/js/liferay/layout_configuration.js 中找到了事件绑定关联的地方,它在_loadContent方法中:

_loadContent: function() {
                    var instance = this; 

                    Liferay.fire('initLayout'); 

                    instance.init(); 

                    Util.addInputType(); 

                    Liferay.on('closePortlet', instance._onPortletClose, instance); 

                    instance._portletItems = instance._dialogBody.all('div.lfr-portlet-item'); 

                    var portlets = instance._portletItems; 

                    instance._dialogBody.delegate(
                        'mousedown',
                        function(event) {
                            var link = event.currentTarget;
                            var portlet = link.ancestor('.lfr-portlet-item'); 

                            instance._addPortlet(portlet);
                        },
                        'a'
                    );

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索页面
, instance
, 事件
, portlet
liferay
liferay dockbar、liferay portlet 开发、liferay mvcportlet、liferay portlet 跳转、liferay portlet,以便于您获取更多的相关知识。

时间: 2024-09-14 13:38:42

Liferay 从Dockbar 添加Portlet的事件细节研究的相关文章

为asp.net中的Web用户控件添加属性和事件

asp.net|web|控件      在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程.它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的实现了对数据库的访问,就当时来说,这是一项多么吸引人的技术,包括现在Internet上的许多web站点都是用Asp写的,我的同事前辈们更是玩Asp的高手,经历这么多年而不衰,可见他的成功.         但是,技术是在不断的发展着,引用某位Net专家的话讲―

为服务器控件添加&amp;#106avascript客户端事件

服务器|客户端|控件 记得在用asp得时候,经常用到javascript.比如验证表单,删除确认等.Asp.Net的是服务器端的,我们的javascript失去了应用的空间.不过经过一番摸索,其实Asp.Net使用javascript非常简单. 先介绍一下WebControl的Attributes属性.(HtmlControl差不多,不再重复),Attributes是获取与控件的属性不对应的任意特性(只用于呈现)的集合.举个例子,一个普通的表单控件<input type="button&q

在asp.net中为Web用户控件添加属性和事件

asp.net|web|控件 在asp.net中为Web用户控件添加属性和事件 在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程.它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的实现了对数据库的访问,就当时来说,这是一项多么吸引人的技术,包括现在Internet上的许多web站点都是用Asp写的,我的同事前辈们更是玩Asp的高手,经历这么多年而不衰,可见他的成功. 但是,技术是在不断的发展着,引

jquery-对一个对象添加点击事件,想把事件的内容封装到一个函数内怎么做?

问题描述 对一个对象添加点击事件,想把事件的内容封装到一个函数内怎么做? $("".banner li"").click(function() { var $li = $(this); var i = $li.text() - 1; //0123 // if (i >= count) return; $("".banner-list i"") .filter("":visible""

在extjs desktop中如何添加点击事件能让startmenu菜单项改变

问题描述 在extjs desktop中如何添加点击事件能让startmenu菜单项改变 在extjs desktop中如何添加点击事件能让startmenu菜单项列表改变成另一个菜单项列表

【Swift 2.1】为 UIView 添加点击事件和点击效果

前言 UIView 不像 UIButton 加了点击事件就会有点击效果,体验要差不少,这里分别通过自定义和扩展来实现类似 UIButton 的效果.   声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com   正文 一.为 UIView 添加点击事件 extension UIView { func addOnClickListener(target: AnyObject, actio

[如何给动态生成的多个按钮同时添加点击事件]

问题描述 [如何给动态生成的多个按钮同时添加点击事件] 解决方案 ...<button onclick='delete(" + m.getmId() + ")'>删除... function delete(id) { 用ajax或者什么办法删除id对应的记录 } 解决方案二: 你还可以给每一行的tr一个id "<tr id=tr_" + m.getmId() + "><td>... 你可以写 function delet

调用Android自带日历功能(日历列表单、添加一个日历事件)

调用Android自带日历功能  觉得这篇文章不错,转载过来. 转载:http://blog.csdn.net/djy1992/article/details/9948393 Android手机配备有一个内置的日历应用程序.第三方应用程序可以利用日历内容提供商接口读取用户的日历信息和安排在日历新的事件.这个日历可以直接同步用户的谷歌日历.  不幸的是,没有文档和Android手机的日历应用集成,因为有另外一个联系人应用程序.相反,本文所提供的所有信息,将会通过逆向工程的谷歌日历内容提供商.该接口

JavaScript我在按钮里面添加了一个事件,点击没反应

问题描述 JavaScript我在按钮里面添加了一个事件,点击没反应 <!documenttype html> <html> <head> <meta></meta> <script type="text/javascript"> var number = 0; var imgs = new Array(); imgs[0]="ww.jpg"; imgs[1]="wq.jpg"