2012-07-02 73 views
5

cargo el WebContent edición de portlets en una ventana emergente con el siguiente código:¿Cómo cerrar una ventana emergente de Liferay.util.openWindow?

<liferay-ui:icon 
    image="edit" 
    message="Edit" 
    url="<%= editUrl %>" 
/> 

El valor para editUrl es:

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) + "'});"; 

Cuando el contenido se guarda o se publicó, el portlet se carga en la ventana emergente. Quiero que la ventana emergente se cierre y el portlet con el enlace editURL para actualizar.

Respuesta

2

Usted puede llamar a la siguiente función javascript de su emergente sólo cuando la edición es exitosa y el pop-up se actualiza:

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'] 
    ); 

Explicación

La ventana emergente se cerrará al proporcionar el id: '" + liferayPortletResponse.getNamespace() + "' de la ventana emergente a la DialogManager 's closeByChild función.

Liferay ha definido un método de utilidad para actualizar el portlet mediante ajax, por lo que puede pasar el <div id="p_p_id_MyWCDPortlet_"> del portlet a la función refresh.

Por lo tanto, cuando la ventana emergente se actualiza después de una actualización exitosa, si llama a la función closePopUpAndRefreshPortlet("customPopUpID") primero se cierra y luego actualiza el elemento primario <div> que contiene el portlet.

Espero que esto ayude.

0

esta página podría ser útil - How to close a Dialog IFrame in Liferay 6.2

Si define su ventana modal como esto (digamos en view.jsp):

<aui:button name="openDialog" type="button" value="open-dialog" /> 

    <liferay-portlet:renderURL var="dialogURL" windowState="<%=LiferayWindowState.POP_UP.toString() %>"> 
     <liferay-portlet:param name="mvcPath" value="/dialog.jsp" /> 
    </liferay-portlet:renderURL> 
    <aui:script use="liferay-util-window"> 
    A.one('#<portlet:namespace/>openDialog').on('click', function(event) { 
     Liferay.Util.openWindow({ 
      dialog: { 
       centered: true, 
       height: 300, 
       modal: true, 
       width: 400 
      }, 
      id: '<portlet:namespace/>dialog', 
      title: '<liferay-ui:message key="i-am-the-dialog" />', 
      uri: '<%=dialogURL %>' 
     }); 
    }); 
</aui:script> 

y crear el botón de disparo (o detector de eventos onsubmit en su caso) dentro de la página de diálogo (dialog.jsp):

<aui:button name="closeDialog" type="button" value="close" /> 

<aui:script use="aui-base"> 
    A.one('#<portlet:namespace/>closeDialog').on('click', function(event) { 
     // Let's suppose that "data" contains the processing results 
     var data = ... 
     // Invoke a function with processgin results and dialog id 
     Liferay.Util.getOpener().<portlet:namespace/>closePopup(data, '<portlet:namespace/>dialog'); 
    }); 
</aui:script> 

obtendrá la ventana que abrió el cuadro de diálogo mediante la función getOpener(). En la página que crea el cuadro de diálogo (view.jsp), usted tiene que proporcionar la función closePopup así:

<aui:script> 
    Liferay.provide(
     window, 
     '<portlet:namespace/>closePopup', 
     function(data, dialogId) { 
      var A = AUI(); 

      // Here you can use "data" parameter 

      // Closing the dialog 
      var dialog = Liferay.Util.Window.getById(dialogId); 
      dialog.destroy(); 
     }, 
     ['liferay-util-window'] 
    ); 
</aui:script> 
+0

Hola, He editado la respuesta - que era sólo mi pereza (copiar la respuesta anterior a esta pregunta). Lo siento por eso. – shimon001

Cuestiones relacionadas