2012-07-02 19 views
5

załadować portlet edycji WebContent na okienko stosując następujący kod:Jak zamknąć okno wyskakujące Liferay.util.openWindow?

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

Wartość editUrl jest:

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

Gdy zawartość jest zapisywana lub publikowane, portlet jest załadowany wyskakujące okno. Chcę zamknąć okno wyskakujące i portlet z linkiem editURL, aby odświeżyć.

Odpowiedz

2

można wywołać następującą funkcję JavaScript z twojej pop-up tylko gdy zmiana jest skuteczna i pop-up zostanie odświeżony:

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

wyjaśnienie

pop-up zostanie zamknięty przez wyświetlenie okna wyskakującego o nazwie id: '" + liferayPortletResponse.getNamespace() + "' dla funkcji DialogManager 'closeByChild.

Liferay zdefiniował metodę narzędzia do odświeżenia portletu przez ajax, więc możesz po prostu przekazać portletowi <div id="p_p_id_MyWCDPortlet_"> do funkcji refresh.

Kiedy okno wyskakujące zostanie odświeżone po udanej aktualizacji, po wywołaniu funkcji closePopUpAndRefreshPortlet("customPopUpID") najpierw zamyka się, a następnie odświeża obiekt nadrzędny <div>, który zawiera portlet.

Mam nadzieję, że to pomoże.

0

ta strona może być pomocne - How to close a Dialog IFrame in Liferay 6.2

Jeśli zdefiniować okno modalne tak (powiedzmy w 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> 

i utworzyć przycisk wyzwalacza (lub onsubmit detektor zdarzeń w Twoim przypadku) wewnątrz okna dialogowego (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> 

otrzymasz okno, które otworzyło okno dialogowe przy pomocy funkcji getOpener(). Na stronie, która tworzy okno (view.jsp), musisz podać funkcję closePopup takiego:

<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

Witam, edytowano odpowiedź - to była tylko moja lazyness (skopiować poprzednią odpowiedź to pytanie). Przepraszam za to. – shimon001

Powiązane problemy