Il rilascio di Liferay 6.2 e di AlloyUI 2.0 ha portato alcune modifiche nella gestione delle dialog, rimuovendo alcuni moduli Javascript e deprecandone altri.
Vediamo come gestire il seguente caso d'uso con Liferay 6.2: chiudere una dialog tramite un pulsante posto al suo interno.
Aprire una dialog è un'operazione semplice che richiede però un minimo di attenzione; supponiamo quindi di inserire il pulsante di apertura nella pagina view.jsp
e di voler visualizzare nella dialog il contenuto della pagina dialog.jsp
. Il procedimento è quello classico illustrato sotto, con la sola particolarità di aggiungere l'attributo id
che identifica univocamente la dialog.
<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>
All'interno della pagina dialog.jsp
potrebbe esserci qualsiasi cosa (come ad esempio un form) e supponiamo che esista un pulsante che inneschi un'elaborazione (leggere e manipolare i campi del form) e la successiva chiusura della dialog stessa.
<aui:button name="closeDialog" type="button" value="close" /> <aui:script use="aui-base"> A.one('#<portlet:namespace/>closeDialog').on('click', function(event) { // Supponiamo che "data" contenga il risultato dell'elaborazione var data = ... // Invocazione una funzione contenente il risultato dell'elaborazione e l'id della dialog Liferay.Util.getOpener().<portlet:namespace/>closePopup(data, '<portlet:namespace/>dialog'); }); </aui:script>
La funzione getOpener()
restituisce la finestra che ha aperto la dialog, ossia view.jsp
; pertanto la funzione closePopup
va definita proprio all'interno di view.jsp
.
<aui:script> Liferay.provide( window, '<portlet:namespace/>closePopup', function(data, dialogId) { var A = AUI(); // Si utilizza "data" in qualche modo // Chiusura della dialog var dialog = Liferay.Util.Window.getById(dialogId); dialog.destroy(); }, ['liferay-util-window'] ); </aui:script>