如何关闭Liferay.util.openWindow弹出窗口?

Urs*_*ula 5 liferay-6

我使用以下代码在Popup窗口上加载WebContent编辑portlet:

<liferay-ui:icon 
    image="edit" 
    message="Edit" 
    url="<%= editUrl %>"
/>
Run Code Online (Sandbox Code Playgroud)

editUrl的值是:

editUrl = "javascript:Liferay.Util.openWindow({ 
dialog:{
    width: 960, 
    modal:true, 
    destroyOnClose: true
}, 
id: '" + liferayPortletResponse.getNamespace() + "', 
title: '" + article.getTitle(Locale.UK, true) + "', 
uri:'" + HtmlUtil.escapeURL(editPortletURLString) + "'});";
Run Code Online (Sandbox Code Playgroud)

保存或发布内容时,将在弹出窗口中加载portlet.我希望关闭弹出窗口,并使用editURL链接刷新portlet.

Pra*_*h K 3

仅当编辑成功并且弹出窗口刷新时,您才能从弹出窗口调用以下 javascript 函数:

Liferay.provide(
        window,
        'closePopUpAndRefreshPortlet',
        function(customPopUpId) {

            var A = AUI();

            A.DialogManager.closeByChild('#' + customPopUpId);

            var curPortletBoundaryId = '#p_p_id<portlet:namespace />';

            Liferay.Portlet.refresh(curPortletBoundaryId);
        },
        ['aui-dialog','aui-dialog-iframe']
    );
Run Code Online (Sandbox Code Playgroud)

解释

将弹出窗口的 提供给 的函数即可关闭弹出id: '" + liferayPortletResponse.getNamespace() + "'窗口。DialogManagercloseByChild

Liferay 定义了一个实用方法来通过 ajax 刷新 portlet,因此您只需将 portlet 传递<div id="p_p_id_MyWCDPortlet_">给该refresh函数即可。

因此,当弹出窗口在成功更新后刷新时,如果您调用该函数,closePopUpAndRefreshPortlet("customPopUpID")它首先会自行关闭,然后刷新<div>包含该 portlet 的父级窗口。

希望这可以帮助。