I cookie ci aiutano a fornire i nostri servizi.

Utilizzando tali servizi, accetti l'utilizzo dei cookie da parte nostra. Per saperne di piu'

Approvo

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>