Ваша лучшая ставка должна зависеть от Ext.Loader
, но не использовать loadScriptFile()
метод, как предложено выше.
Ext 4 вводит систему классов.Одним из (многих) преимуществ этого является деп-дерево, которое позволяет вам управлять всеми своими межкомпонентными зависимостями и классами загрузки по мере необходимости.
Вот как вы инициализируете загрузчик
Ext.Loader.setPath('App','/js/app');
Ext.Loader.setPath('WidgetsLibrary','/js/widgets');
Ext.Loader.setConfig({enabled: true});
Определите динамически загружаемый класс контроллера:
Ext.define('App.controller.Menu', {
extend: 'Ext.app.Controller', // leave it as it is
models: ['Event','User'], // this assumes App.model.* prefix
stores: ['Options','Permissions'], // this assumes App.store.* prefix
views: ['menu.Bar','SmartButton'],// this assumes App.view.* prefix
requires: [
'App.whatever.other.class', // auto-load this class as a dependency
'WidgetsLibrary.*', // auto-load all classes in WidgetsLibrary
],
init: function(){}
// [...]
Теперь динамически загружаем ваш класс контроллера (макет):
Ext.require(
'App.controller.Menu', // this auto-loads all dependencies
function(){
// ... as soon as this class
// and all its dependencies have loaded...
var controller = Ext.create('App.controller.Menu'); // create an instance
controller.init(); // launch init() method
}
);
БОНУС: используя систему классов и загрузчик, вам не нужно поддерживать собственную коллекцию контроллеров и проверять, загружен контроллер или нет.Просто используйте метод Ext.ClassManager.isCreated()
, описанный здесь .
if(Ext.ClassManager.isCreated('App.controller.Menu')){
// ... controller has already been loaded and init ...
}else{
// we need to auto-load that controller using Ext.require()
}
Подробнее: