我的代码与 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 );
},