В Liferay один портлет может открыть отдельный портлет в новом диалоговом окне AUI? - PullRequest
0 голосов
/ 18 января 2012

Я был на всех сайтах Liferay и не нашел ответ, который работает.Я хочу, чтобы внутри моего пользовательского портлета была включена функция JavaScript, которая откроет диалоговое окно AUI, и в этом диалоговом окне отображается содержимое view.jsp из совершенно отдельного портлета.

Вот что у меня получилось:

AUI().ready('aui-dialog','aui-dialog-iframe','liferay-portlet-url', function(A) {
        var url = Liferay.PortletURL.createResourceURL();
        url.setPortletId("my_portlet_that_I_want_in_a_dialog");
        url.setWindowState('pop_up'); 

    #foreach ($parameter IN $parameters.getSiblings())
        url.setParameter("${parameter.data}", "${parameter.value.data}");
    #end  


    window.myDialog = new A.Dialog(
        {
            title: 'My Dialog',
            width: 640,
            centered: true
        }
    ).plug(
        A.Plugin.DialogIframe,
        {
            uri: url.toString(),
            iframeCssClass: 'dialog-iframe'
        }
    )
});

Затем в совершенно другом портлете появилась функция JavaScript, которая вызывает:

window.myDialog.render()

Это много работает.Однако, когда диалоговое окно появляется, оно всегда пустое или бесконечно показывает анимацию «Загрузка».

Возможно связано : В консоли Firebug я вижу

"yui: НЕ загружено: отложенное задание"

Не уверен, связано ли это с текущей проблемой или нет.Спасибо за помощь.

РЕДАКТИРОВАТЬ: Если я зарегистрирую переменную URL в консоли, а затем скопировать и вставить URL в новую вкладку, ответ будет полностью пустым.Это наводит меня на мысль, что я либо неправильно генерирую URL, либо здесь происходит какая-то проблема с разрешениями между портлетами.

1 Ответ

1 голос
/ 19 января 2012

После 3 дней, когда я бился головой об стену, пытаясь понять это, и копаясь в ужасной документации Liferay, решение было довольно простым.

Вместо

url.setWindowState('pop_up'); 

Это должно было быть:

url.setWindowState('exclusive');

Как только я это сделал, все заработало отлично.

...