Ext.app.Application不使用name config创建全局变量

时间:2011-07-28 16:22:30

标签: extjs extjs4

在4.0.2a文档中:http://docs.sencha.com/ext-js/4-0/#/...pp.Application

我明白这一点:

Ext.application({
    name: 'MyApp',
    launch: function() {
        Ext.create('Ext.container.Viewport', {
            items: {
                html: 'My App'
            }
        });
    }
});

“这可以做几件事。首先它创建一个名为'MyApp'的全局变量 - 所有应用程序的类(例如模型,视图和控制器)都将驻留在这个单独的命名空间下,这大大降低了全局冲突的可能性变量“。

当我运行此代码时,我没有看到名为MyApp的全局变量...其他人是否有此问题?

这是我的整个应用程序(在单个HTML页面中):

<!DOCTYPE html>
<html>
<head>
    <title>Testing ExtJS 4</title>
    <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" />
    <script type="text/javascript" src="extjs/ext-all-debug-w-comments.js"></script>
    <script type="text/javascript">
    Ext.application({
        name: 'MyApp',
        launch: function() {
            Ext.create('Ext.container.Viewport', {
                items: {
                    html: 'My App'
                }
            });
        }
    });
    Ext.onReady(function() {
        alert(typeof MyApp);
    });
    </script>
</head>
<body></body>
</html>

2 个答案:

答案 0 :(得分:3)

它不起作用,因为api状态(guide/mvc application architecture):

“......所有Ext JS 4应用程序应该只使用一个全局变量,所有应用程序的类都嵌套在 ......”。

如果您尝试使用此代码:

 Ext.application({
    name: 'MyApp',
    appFolder: '/app',

    autoCreateViewport: true,

    launch: function() {
        console.log(MyApp);

    }
});

您将看到全局变量存在。您无需从应用程序本身以外的任何其他位置访问该应用程序

答案 1 :(得分:1)

我得到了同样的错误,这就是我找到的。

在index.html中:

Ext.Loader.setConfig({enabled:true});

Ext.application({
    name: 'MyApp',
    controllers: ['Test'],
    launch: function() {
        Ext.create('Ext.container.Viewport', {
            items: {
                html: 'My App'
            }
        });
    }
});

Ext.onReady(function() {
    alert(typeof MyApp);
});

创建一个小型控制器:app / controller / Test.js(/ app与/ extjs具有相同的父文件夹)

Ext.define('MyApp.controller.Test', {
    extend: 'Ext.app.Controller',

    init: function() {
        console.log('The controller was initialised');
    }
});

运行时,在Firebug中,您将看到My​​App全局变量。但是,仍然会出现警告声明的“未定义”消息框。

IMHO MyApp是一个“维护对应用程序使用的所有模型,视图和控制器的引用”的对象。也许extjs使用某种类型的“动态加载”;所以它不会创建那个全局变量,直到内部包含某些内容(控制器,视图,模型)(我不确定)。在这种情况下,必须创建变量以包含控制器Test。但是,我无法解释警报的“未定义”消息。也许当时Ext对象已经准备就绪,但是“动态加载”来创建视口,而变量MyApp还没有完成(不确定)。

希望得到这个帮助。