4

我有一个很大的应用程序,所以我没有在 app.js 中添加东西:

stores: []
controllers: []
views: []
models: []

里面只有我需要创建应用程序的东西。那么,当我单击节点(左侧面板)时,如何创建我需要的控制器并在该控制器中加载模型、视图、存储和其他内容?仅调用控制器就足够了吗(因为它们是在控制器中导入的)?

就像是

Ext.create('MyApp.path.SomeController');

是否会像我将其添加controllers: []到 app.js 中一样添加?

4

2 回答 2

3

从我的 app.js,(因此this是一个 Ext JS 应用程序):

addController: function (name) {
        var c = this.getController(name); //controller will be created automatically by name in this getter 
        //perform the same initialization steps as it would have during normal ExtJs process
        c.init(this);
        c.onLaunch(this);
    }

name作为班级名称...

还要记住,您可以通过任何其他控制器获取应用程序实例的句柄this.application

于 2012-12-04T22:01:29.410 回答
2

我的代码与 Jenson 的代码非常相似。

// This function loads a controller dynamically and returns its first view
// Note: We don't call onLaunch(this) here. This method might be called during 
// bootstrap (like if there's a cookie with the recent page), after which 
// the application itself will call onLaunch (once out of the Launch method).
// The other issue is that the view is not added when this method is called
// and we might need to reference the view withing onLaunch, so this is the
// wrong place to call on Launch). Currently we're not relying on onLounch 
// with controllers.
dynamicallyLoadController: function( aControllerName )
{
    // See if the controller was already loaded
    var iController = this.controllers.get(aControllerName);

    // If the controller was never loaded before
    if ( !iController )
    {    
        // Dynamically load the controller
        var iController = this.getController(aControllerName);

        // Manually initialise it
        iController.init();
    }

    return iController;
},

loadPage: function( aControllerName )
{
    // save recent page in a controller
    Ext.util.Cookies.set( 'RecentPage', aControllerName );

    var iController   = this.dynamicallyLoadController( aControllerName ),
        iPage         = iController.view,
        iContentPanel = this.getContentPanel(),
        iPageIndex    = Ext.Array.indexOf(iContentPanel.items, iPage);

    // If the page was not added to the panel, add it.
    if ( iPageIndex == -1 )
        iContentPanel.add( iPage );

    // Select the current active page
    iContentPanel.getLayout().setActiveItem( iPage );
},
于 2012-12-04T22:11:24.747 回答