Liferay弹出层如何将弹出页面的值返回
在前面写过两篇关于如何在Liferay中进行弹出层的文章:
《Liferay 6.1开发学习(十三):弹出层/弹出对话框的使用》
弹出之后,有时候我们有需求需要将当前弹出层的内容,写到父页面上,然后并关闭当前的弹出层。
首页弹出层的写法
如果要写一个返回值,并执行关闭的弹出层,这个的写法也有区别: Liferay.provide( window, '<portlet:namespace />editAnswer', function(id) { var dialogID = '<portlet:namespace />anser_edit_dialog'; var dialog = Liferay.Util.Window.getById(dialogID); if (dialog!=null){ dialog.destroy(); }; Liferay.Util.selectEntity( { dialog: { constrain: true, modal: true, destroyOnClose: true, width: 860 }, id: dialogID, title: '编辑回复', uri: '${editAnswerURL}&<portlet:namespace />answerId='+id } ); } );
上面的代码是一个相对完整的示例,前面执行 dialog.destroy()是为了每次打开都是一个新的,不然如果页面上需要弹出多个,每个每次弹出的显示内容不一样,这样就不会实现,如果不加 dialog.destroy()就会每次弹出的都是第一个弹出的页面内容。
其中的URI里面是我们要弹出的目标的Portlet的地址,
弹出层中将值写到上级页面
在弹出层中将值写到上级页面,我们只需要在弹出层页面能够调用上级页面的JS代码即可。
调用上级页面的JS,在弹出层中这样写
Liferay.Util.getOpener().<portlet:namespace/>closePopup()
其中的getOpener().后面的是上级页面的函数,可以在这里将要传的值用JS参数的形式传递过去。
关闭弹出层
使用这个方法获取到弹出层对象,var dialog = Liferay.Util.Window.getById(dialogId);
然后destory:dialog.destroy()