2012-07-02 46 views
5

tôi nạp WebContent chỉnh sửa portlet trên một cửa sổ Popup sử dụng đoạn mã sau:Cách đóng cửa sổ bật lên Liferay.util.openWindow?

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

Giá trị cho editUrl là:

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

Khi nội dung được lưu hoặc xuất bản, các portlet được nạp vào cửa sổ bật lên. Tôi muốn cửa sổ bật lên đóng và portlet có liên kết editURL để làm mới.

Trả lời

2

Bạn có thể gọi sau hàm javascript từ bạn pop-up chỉ khi chỉnh sửa thành công và các cửa sổ pop-up được làm mới:

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

Giải thích

Các cửa sổ pop-up sẽ bị đóng bằng cách cung cấp id: '" + liferayPortletResponse.getNamespace() + "' của cửa sổ bật lên với chức năng closeByChild của DialogManager.

Liferay đã xác định phương thức tiện ích để làm mới portlet thông qua ajax, vì vậy bạn chỉ có thể chuyển số <div id="p_p_id_MyWCDPortlet_"> của portlet vào hàm refresh.

Vì vậy, khi cửa sổ bật lên được làm mới sau khi cập nhật thành công, nếu bạn gọi hàm closePopUpAndRefreshPortlet("customPopUpID"), trước tiên nó đóng chính nó và sau đó làm mới phụ huynh <div> có chứa portlet.

Hy vọng điều này sẽ hữu ích.

0

trang này có thể hữu ích - How to close a Dialog IFrame in Liferay 6.2

Nếu bạn xác định cửa sổ modal của bạn như thế này (giả sử trong 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> 

và tạo nút kích hoạt (hoặc onsubmit lắng nghe sự kiện trong trường hợp của bạn) bên trong hộp thoại (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> 

bạn sẽ nhận được cửa sổ mở hộp thoại bằng hàm getOpener(). Trong trang tạo ra hộp thoại (view.jsp), bạn phải cung cấp các chức năng closePopup như thế này:

<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

Hi, tôi đã chỉnh sửa câu trả lời - đó chỉ là lazyness của tôi (để sao chép các câu trả lời trước để câu hỏi này). Xin lỗi vì chuyện đó. – shimon001

Các vấn đề liên quan