【问题标题】:Running multiple extjs4 apps on a liferay portal page在 liferay 门户页面上运行多个 extjs4 应用程序
【发布时间】:2012-01-25 13:01:29
【问题描述】:

我正在为网站使用 liferay 门户。我所有的 portlet 都基于 Extjs4 MVC 框架。问题是当我将多个基于 Extjs4 的 portlet 添加到一个页面时,其中一个不会加载。我尝试了应用程序的 app.js 文件。并发现当我将初始化代码添加到其中一个 portlet 时,它们都开始运行了。

例如下面的代码可以工作,

Ext.Loader.setPath('Ext', '/loc-treeview-portlet/loc-treeview/ext-4.0/src');

//loader path for the first app

Ext.Loader.setPath('LocTree', '/loc-treeview-portlet/loc-treeview/app');

//loader path for the second app
Ext.Loader.setPath('ServiceTree', '/service-layer-portlet/service-treeview/app');

// Instantiate the apps which I have created by extending Ext.app.Application
Ext.create('LocTree.app.LocTreeApplication');
Ext.create('ServiceTree.app.ServiceTreeApplication');

但我无法在实际的门户中执行此操作,因为事先不知道页面中将包含哪些 extjs4 应用程序。有没有人知道如何让这些应用程序独立工作?

【问题讨论】:

    标签: extjs4 liferay


    【解决方案1】:

    也许您可以将应用程序定义提取到页面模板中,这样您就知道只有一个应用程序启动事件。那么每个portlet 本质上都是一个带有自己控制器的视图。不过,您需要在控制器上手动调用 init()。

    【讨论】:

    • 感谢 DmitryB 的回复。这是不可能的,因为我不知道哪些 portlet 会提前在给定页面上可用。
    【解决方案2】:

    问题似乎是 ExtJS4 中的文档“就绪”事件仅在给定页面中初始化一个应用程序(portlet)。所以我所做的是将所有代码 app.js 文件包装在 AUI().ready() 调用中。

    AUI().ready(function(){
         // all app.js code here
    
    });
    

    【讨论】:

    • 我不知道,但它不起作用。不幸的是,我没有时间深入研究细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2013-07-08
    • 2013-01-22
    • 2019-05-17
    • 2019-01-15
    • 1970-01-01
    • 2015-12-15
    相关资源
    最近更新 更多