2012-07-02 32 views
5

carico il portlet WebContent di modifica su una finestra popup con il seguente codice:Come chiudere una finestra popup di Liferay.util.openWindow?

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

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

Quando il contenuto viene salvato o pubblicato, il portlet viene caricato su la finestra popup. Voglio che la finestra popup si chiuda e il portlet con il link editURL da aggiornare.

risposta

2

È possibile chiamare il seguente funzione javascript dal pop-up solo quando la modifica è successo e il pop-up viene rinfrescata:

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

Spiegazione

Il pop-up verrà chiuso fornendo lo id: '" + liferayPortletResponse.getNamespace() + "' del pop-up alla funzione closeByChild di.

Liferay ha definito un metodo di utilità per aggiornare la portlet tramite ajax, in modo da poter semplicemente passare del portlet <div id="p_p_id_MyWCDPortlet_"> alla funzione refresh.

Così, quando il pop-up viene aggiornato dopo un aggiornamento riuscito, se si chiama la funzione closePopUpAndRefreshPortlet("customPopUpID") si chiude prima da sé e quindi si aggiorna il genitore <div> che contiene il portlet.

Spero che questo aiuti.

0

questa pagina potrebbe essere utile - How to close a Dialog IFrame in Liferay 6.2

Se si definisce la vostra finestra modale come questo (diciamo in 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> 

e creare pulsante a scatto (o listener di eventi onSubmit nel tuo caso) all'interno della pagina di dialogo (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> 

si aprirà la finestra che ha aperto la finestra di dialogo con la funzione getOpener(). Nella pagina che crea la finestra di dialogo (view.jsp), è necessario fornire la funzione closePopup in questo modo:

<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

Ciao, ho curato la risposta - era solo la mia pigrizia (di copiare la risposta precedente questa domanda). Perdonami per quello. – shimon001

Problemi correlati