Рабочий стол ExtJS 4 MVC - как программно создать / открыть модуль - PullRequest
0 голосов
/ 10 декабря 2011

У меня есть работающее веб-приложение для настольных компьютеров, очень похожее на готовый пример рабочего стола ExtJS, где есть несколько значков, которые при нажатии открывают окно.

Я пытаюсь понять, как сделать то же самое программно:

var x = Ext.create('MyApp.view.users.Module')
x.launcher.handler();

это вызывает функцию createWindow (), первая строка которой:

var b = this.app.getDesktop();

Эта линия бомб:

Невозможно вызвать метод 'getDesktop' из неопределенного

что, очевидно, означает, что в "this" нет "app".

Я новичок в ExtJS и не знаю, как привязать модуль к приложению или как правильно захватить модуль, как это происходит при нажатии на значок. Любая помощь будет оценена.

Код модуля:

Ext.define('MyApp.view.users.Module', {

requires:                     ["Ext.tab.Panel"],
alias:                        'widget.usersmodule',
extend:                       'Ext.ux.desktop.Module',
id:                           'users-module-win',
itemId:                       'usersmodule',

init:                          function(){
    this.launcher = {
        handler:               this.createWindow,
        iconCls:              'icon-users',
        scope:                 this,
        text:                 'Users',
        windowId:             'users-module-win'
    }
},

...

createWindow:                    function(){
    var b = this.app.getDesktop();
    var a = b.getWindow('users-module-win');

    ...

    a.show();
    return a
},

...
* *} Тысяча двадцать-одина); * * тысяча двадцать-дв

Ответы [ 2 ]

3 голосов
/ 12 декабря 2011

Хорошо, я нашел один способ решить эту проблему.

Когда я создаю свое настольное приложение как часть создания приложения, я устанавливаю глобальную переменную для результата этого действия:

var _myDesktopApp;

Ext.application({

appFolder:'MyApp',

controllers:[
  ....
],

name:'MyApp',

launch:function () {

        Ext.Loader.setPath({
            ....
        });

        Ext.require('MyDesktop.App');
        Ext.require('Ext.tab.*');

        Ext.onReady(function () {
            _myDesktopApp = Ext.create('MyDesktop.App');
        });
    };
}

});

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

Ext.define("MyDesktop.App", {
extend:                     "Ext.ux.desktop.App",
requires:                    [
    "Ext.window.MessageBox",
    "Ext.ux.desktop.ShortcutModel",

    "MyApp.view.prospects.Module",        
    "MyApp.view.users.Module"
],
init:                        function () {
    this.callParent();

    var prospects_width = 700;
    var prospects_height = 500;
    var prospects_x = 0;
    var prospects_y = 0;
    _myDesktopApp.getModule('prospects-module-window').createWindow(prospects_width, prospects_height, prospects_x, prospects_y);

    var users_width = 700;
    var users_height = 500;
    var users_x = 700;
    var users_y = 0;
    _myDesktopApp.getModule('users-module-window').createWindow(users_width, users_height, users_x, users_y);
},

....

Этот код открывает 2 окна модуля при загрузке и размещает их на рабочем столе рядом.

0 голосов
/ 10 декабря 2011

У вас есть проблемы со сферой охвата здесь.Попробуйте изменить метод init на initComponent.

Отладка приложения с помощью Firefox с Firebug.Поместите точку останова в строку var b = ... и посмотрите, какие переменные находятся в области видимости.

...