Ext.app.Application не создает глобальную переменную, используя имя config - PullRequest
2 голосов
/ 28 июля 2011

В документах 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 ]

3 голосов
/ 29 июля 2011

это не работает, потому что, как указано в API ( guide / mvc прикладная архитектура ):

"... Все приложения Ext JS 4 должны использовать только одну глобальную переменную со всеми вложенными классами приложения * ...".

Если вы попробуете с этим кодом:

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

    autoCreateViewport: true,

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

    }
});

вы увидите, что глобальная переменная существует. Вам не нужно обращаться к приложению из любого другого места, кроме самого приложения

1 голос
/ 06 октября 2011

Я получаю ту же ошибку, и вот что я нашел.

В 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 (/приложение имеет ту же родительскую папку, что и / extjs)

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

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

При запуске в Firebug вы увидите глобальную переменную MyApp.Тем не менее, для сообщения с предупреждением все еще появилось окно сообщения «undefined».

IMHO MyApp - это объект, который «поддерживает ссылки на все модели, представления и контроллеры, используемые приложением».Возможно, extjs использует некоторый тип класса «Динамическая загрузка»;поэтому он не будет создавать эту глобальную переменную до тех пор, пока внутри нее не будет что-то (контроллеры, представления, модели) (я не уверен в этом).В этом случае переменная должна быть создана, чтобы содержать тест контроллера.Тем не менее, я не могу объяснить «неопределенное» сообщение для предупреждения.Возможно, в это время объект Ext готов, но «Динамическая загрузка» для создания области просмотра и переменной MyApp не завершена (не уверен).

Надеюсь, что это поможет.

...