2014-09-25 4 views
5

Я довольно новичок в Extjs, и, пройдя несколько учебных пособий и блогов на шаблоне Extjs MVC, я не понимаю, как сложное приложение (например, 10-15-страничная навигация) может строиться на платформе extjs.Как контроллеры используются с MVC в приложении Extjs

На форумах sencha предлагается, чтобы все контроллеры должны были быть определены заранее в app.js (потому что контроллеры загрузки перед раздачей не будут попадать в производительность по сравнению с пользовательским интерфейсом, который загружает DOM. Обратите внимание, что это было упомянуто администратором форума Sencha).

Идя выше подхода, у меня есть несколько вопросов:

  • когда же контроллер получить экземпляры? Все они загружены и установлены, когда приложение загружается и продолжает слушать события, определенные в них, до срока службы приложения?

  • Что означает определение моделей [], магазинов [] и Views [] в классе контроллера? Когда они загружаются и создаются?

  • Как работает навигационная система с контроллерами? Если переход на новую страницу просто переводится в getParentContainer.remove (componentX) и getParentContainer.add (componentY), то целью контроллеров является просто файл для обработки событий?

  • Есть ли возможность (уничтожение уничтожения) с контроллерами? Если не так, как можно создать и уничтожить несколько экземпляров, чтобы мои действия не прослушивались неправильным экземпляром (я видел некоторые блоги, в которых упоминаются контроллеры, в основном одноэлементные)?

Может ли кто-нибудь пролить свет на это? Любые примеры/иллюстрации будут очень полезны.

Благодаря

ответ

8

В Ext JS классы Ext.app.Controller являются (из коробки) воплощенные с инициализации приложения. Фактически, init() контроллера вызывается перед запуском() самого приложения. Так что да, контроллеры являются «пожизненными», слушая с момента запуска приложения на протяжении всего срока службы приложения. Там являются способами динамического создания и уничтожения контроллеров, но для этого потребуется специальная реализация.

В Ext JS 5, однако, была введена концепция ViewController. Он расширяет ту же базу (Ext.app.BaseController), что и Ext.app.Controller, но в отличие от выше, ViewController создается и уничтожается вместе с экземпляром представления, к которому он привязан. Это автоматически обрабатывается каркасом - нет необходимости в специальной реализации, чтобы это работало.

Что касается моделей: [], магазины: [] и представления: [], это в основном требует() для контроллера, инструктируя его обеспечить загрузку этих классов. Соглашения - это просто сокращенный способ требовать от этих классов от их конкретных пространств имен (например, AppName.view, AppName.store и т. Д.). В случае представлений и магазинов это соглашение также будет генерировать геттеры для требуемых классов.

Что касается навигации, это зависит от вас. Существует несколько способов создания приложения Ext JS. Вы можете сделать одностраничное приложение, в котором навигация, вероятно, будет напоминать то, что вы упомянули, довольно близко (много от меня). Вы также можете создавать многостраничные приложения, которые могут обеспечить более традиционное восприятие страницы на странице, но использовать общий код и классы для каждой страницы в зависимости от потребностей каждой страницы.

Наконец, в отношении вопроса о столкновениях слушателя ответ «это зависит». Если вы используете Ext JS 4, у вас только имеют контроллеры «lifer», и поэтому избегать столкновений в слушателях - это вопрос о том, чтобы быть чрезвычайно осведомленным о селекторах, которые вы используете в своих режимах listen() или control() разделов и обеспечения того, что вы не дублируете слушателей (либо посредством явного дублирования, либо слишком широкого выбора), если это не то, что вы хотите сделать. Вместе с Ext JS 5 концепция ViewController более или менее устраняет эту проблему, поскольку домен ViewController «прослушивания» ограничен экземпляром представления, к которому он привязан.

Насколько примеров, я настоятельно рекомендую вам начать с документацией для Ext JS 5:

http://docs.sencha.com/extjs/5.0/whats_new/5.0/whats_new.html

http://docs.sencha.com/extjs/5.0.1/

«А что это новая» документация имеет некоторые действительно большое обсуждение архитектуры которые погружаются в детали этих понятий намного больше, чем это возможно на SO.

+0

Большое спасибо за ваши комментарии. Это объясняет большинство моих вопросов. Я разрабатываю приложение с помощью Extjs 5. Итак, начинаем с ext5, имеет ли смысл использовать только Ext.app.ViewControllers для всех контроллеров общего назначения? и есть один Ext.app.Controller (который является глобальным и всегда живым) для обработки глобальных событий, таких как маршрутизация? – optimusPrime

+0

В общем, я считаю, что это хороший подход. В Ext JS 4 большая часть материала, выполняемого в контроллерах, обрабатывала события просмотра, которые, безусловно, являются областью просмотра ViewController. Я все еще разорван на лучший способ сделать маршрутизацию ... в 4, я разработал свой собственный, который позволил мне определить маршруты в контроллерах, которые сохраняли его очень чистым и сегментированным. В 5, конечно, вы не можете сделать это по-видимому в ViewControllers, поскольку они могут не существовать, чтобы обрабатывать маршрут. Поэтому использование общего контроллера для маршрутизации, вероятно, является наименее грязным способом его обработки. – existdissolve