0

我已经遍及 Liferay 网站,但没有找到有效的答案。我想要做的是在我的自定义 portlet 中有一个 JavaScript 函数,它将打开一个 AUI 对话框,并且该对话框显示来自一个完全独立的 portlet 的 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'
        }
    )
});

然后,在一个完全不同的 portlet 中,我有一个 JavaScript 函数,它调用:

window.myDialog.render()

这很管用。但是,当对话框出现时,它总是空白或无限显示“加载”动画。

可能相关:在 Firebug 控制台中,我看到

“yui:未加载:延迟任务”

不确定这是否与当前问题有关。谢谢您的帮助。

编辑:如果我将 URL 变量记录到控制台,然后将 URL 复制并粘贴到新选项卡中,则响应完全为空白。这让我相信我要么没有正确生成 URL,要么这里发生了某种 portlet 间权限问题。

4

1 回答 1

1

After 3 days of banging my head against the wall trying to figure this out, and digging through Liferay's abysmal documentation, the solution was pretty simple.

Instead of

url.setWindowState('pop_up'); 

It needed to be:

url.setWindowState('exclusive');

Once I did that, it worked perfectly.

于 2012-01-18T23:54:54.477 回答