2013-06-24 2 views
2

В настоящее время я разрабатываю приложение Ext JS со многими видами/контроллерами/... Мне интересно, что лучше всего подходит для загрузки JS-контроллеров/представлений и т. Д. на ...Ext JS 4.2.1 контроллер загрузки - лучшая практика

в настоящее время я мое приложение определяется следующим образом:

// enable javascript cache for debugging, otherwise Chrome breakpoints are lost 
Ext.Loader.setConfig({ disableCaching: false }); 

Ext.require('Ext.util.History'); 
Ext.require('app.Sitemap'); 
Ext.require('app.Error'); 


Ext.define('app.Application', { 
    name: 'app', 

    extend: 'Ext.app.Application', 

    views: [ 
     // TODO: add views here 
     'app.view.Viewport', 
     'app.view.BaseMain', 
     'app.view.Main', 
     'app.view.ApplicationHeader', 

     //administration 
     'app.view.administration.User' 
     ... 
    ], 

    controllers: [ 
     'app.controller.Viewport', 
     'app.controller.Main', 
     'app.controller.ApplicationHeader', 

     //administration 
     'app.controller.administration.User', 
     ... 
    ], 

    stores: [ 
     // stores in there.. 
    ] 
}); 

каким-то образом это заставляет клиент загрузить все мои взгляды и контроллеры при запуске и призывает все инициализации методы всех контроллеров конечно. . Мне нужно загружать данные каждый раз, когда я просматриваю свое представление .. и теперь я не могу загрузить его в мои контроллеры init functi на. Я должен был бы сделать что-то вроде этого, я предполагаю:

init: function() { 
    this.control({ 
     '#administration_User': { 
      afterrender: this.onAfterRender 
     } 
    }); 
}, 

Есть ли лучший способ сделать это? Или просто другое событие?

Хотя главное, что я спрашиваю себя, это, если это самая лучшая практика для загрузки всего javascript при запуске. Разве не лучше было бы загружать контроллеры/представления/... которые нужен клиенту прямо сейчас? Или я должен загружать все JS при запуске?

Если я хочу динамически загружать контроллеры, как я могу это сделать? Я предполагаю, что вам придется удалить их из массивов приложений (представлений, контроллеров, хранилищ) и создать экземпляр, если он мне нужен, и mby установить представление в init-контроллерах ?!

Что лучше?

UPDATE

Would deftJS с ViewController быть хорошей альтернативой? Каковы основные плюсы и минусы deftJS?

ответ

3

Вы можете загрузить все контроллеры при запуске. Смотрите ниже ссылки, испытанные 1000 контроллеров и это быстро:

Best practices for initializing and deconstructing controllers

Вашим лучшим выбор для быстрого применения, чтобы иметь все необходимые файлы свернутые и сжатые в один файл, используя Сенч ЦМД.

Вы не должны загружать данные в виде в init, так как ui еще не загружен, можете сделать это на onLoad, если хотите.

Я бы загрузил данные вида в afterrender или, возможно, activated событий.

В идеале вы должны использовать модульный подход, в котором вы вызываете метод init() для модуля, для которого требуются контроллеры, представления и модели для этого модуля.

+0

В ответ на ваш связанный пост пользователь catalinux написал что-то о DeftJS. Я немного вникал в это, но это было для меня новым. Каковы основные плюсы и минусы этого? Есть ли недостатки с использованием DeftJS? – JuHwon

+1

Мне нравится Deft для его IoC и отложенных/обещаний, но я думаю, что они прикрутили свои селектора для MVC. Например, вы не можете выбрать все поля в форме с Deft, но можете с помощью обычного extjs mvc. –

+2

@NeilMcGuigan Я только начал использовать DeftJS, и я могу сказать вам, что последний оператор (не может использовать сложные селектора) неверен. Однако область действия селектора ограничена детьми контролируемого вида.Какой IMO - очень хорошая вещь: регулярный ExtJS позволяет вам выбирать что-либо из любого контроллера, который оставляет дверь открытой для создания скрытых зависимостей. Для меня ExtJS «MVC» был очень плохо спроектирован, и DeftJS, наконец, придал определенный смысл архитектуре приложения Ext. – RIAstar