2011-12-09 56 views
0

我有一個可用的Web桌面應用程序,與開箱即用的ExtJS桌面應用程序非常相似,其中有許多圖標,點擊時,產生一個窗口。ExtJS 4 MVC桌面 - 如何以編程方式創建/打開模塊

我試圖找出如何做編程同樣的事情:

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 
}, 

... 

});

回答

3

好吧,我想出了一種解決這個問題的方法。

當我創建我的桌面應用程序爲應用程序創建的一部分,我的全局變量設置爲行動的結果:

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

你有一個範圍問題在這裏進行。嘗試將init方法更改爲initComponent。

使用Firefox和Firebug調試您的應用程序。將斷點放在var b = ...行上,並查看範圍內有哪些變量。

相關問題