Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.06.2012, 14:40
Интересующийся
Отправить личное сообщение для unet900 Посмотреть профиль Найти все сообщения от unet900
 
Регистрация: 02.07.2010
Сообщений: 12

Контроллеры в EXT 4
Объясните плз какую именно логику нужно ложить в контроллеры в EXT 4 а что ложить во View ??
Ответить с цитированием
  #2 (permalink)  
Старый 07.06.2012, 14:55
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

unet900,
В идеале все методы, кроме initComponent, должны храниться в контроллере, во view только представление (в частности лэйаутинг компонентов). Почитайте -> http://docs.sencha.com/ext-js/4-1/#!...n_architecture
Ответить с цитированием
  #3 (permalink)  
Старый 21.06.2012, 13:59
Аспирант
Отправить личное сообщение для Allan Stark Посмотреть профиль Найти все сообщения от Allan Stark
 
Регистрация: 24.04.2010
Сообщений: 87

Да... Только если скачать ихний же Sencha Architect 2 (он триальный) и попробовать сваять там приложение MVC, то например логику обработки событий кнопок оно само ложит в view...

Создалось впечатление, что в самой Сенча начали понимать, что с MVC несколько перемудрили...
Да и вот: http://javascript.ru/forum/showthrea...005#post183005

Последний раз редактировалось Allan Stark, 21.06.2012 в 14:02.
Ответить с цитированием
  #4 (permalink)  
Старый 21.06.2012, 21:26
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Что касается архитектуры extjs вообще.
Чуть ли не все классы(model/view/controller/component и тд) в extJs, реализует модель поведения observer.
грубо говоря паттерн observer отслеживает события в классах и реагирует на них, а также может сам генерировать события.

View тоже наследует модель поведения от observer, а значит мы можем работать с событиями в view. Но если событий в view стало слишком много, или нам нужно работать с несколькими view, то мы можем создать контроллёр(опять же наследующий observer) которому мы дадим задачу следить за интерисующими нас классами, и заставим контролёр обрабатывать события.

Вдумайтесь.
-Когда мы встаиваем компонент в view, и обрабатываем события компонентов в view, то по сути view в этом случае функционирует как обсервер следящий за событиями в компонентах. Если вложенность больше, то это не что другое как обсервер , следящий за событиями другого observer'а.

-Когда мы создаём контролёр по сути это тот же обсервер следящий за событиями, но в отличии от копонент и view, контролёр нечего неотображает на экране. Думаю при желании один контролёр можно даже научить следить за событиями другого контролёра.

Если угодно то в ExtJs контролёр можно воспринимать как вспомогательную надстройку/следилку за событиями, которую можно использовать по желанию/необходимости. ОДнако необязательность контролёра не означает что он не нужен совсем.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 22.06.2012 в 13:05.
Ответить с цитированием
  #5 (permalink)  
Старый 21.06.2012, 22:07
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Продемонстрирую несколько подходов

пример 1. Толстый VIEW, он же Быдлокод.
задача. надо нажать на три кнопки, тогда запустится какаянибудь сложная логика.

реализация:
1) в view есть обработчик событий, увеличивающий счётчик при нажатии каждой кнопки.
2) когда значение счётчика достигает 3х, view запускает функцию с требуемой логикой .
3) Исполняется функции с логикой, код функции полностью расположен в view.

получаем огромный уродливый view.

пример 2. Не чистый MVC, реализация слабой связанности паттерном Observer(Наблюдатель).
задача. надо нажать на три кнопки, тогда запустится какаянибудь сложная логика.

реализация:
1) в view есть обработчик событий, увеличивающий счётчик при нажатии каждой кнопки.
2) когда значение счётчика достигает 3х, view генерирует события FIRERUN.
3) подписанный на событие FIRERUN контролёр, видит сообытие и выполняет логику.

вроде всё красиво, хоть идеология MVC не соблюдена в полной мере.

пример 3. чистый MVC с толстым контролёром
Здесь строго настроuо запрещено реагировать на любые события в View, можно только в контролёре.
реализация:
В этом случае реакция на события кнопки происходит в контролёре, когда счётчик достигает 3х запускается метод расположенный в этом же контроллёре.

Иметь толстенький контролёр порой тоже нужно, но чаще не красиво, особенно когда речь идёт об обработке данных.

пример 4. чистый MVC с тонким контролёром
реализация:
всё как в третим примере, однако "сложная логика " (предположим что это обработка данных), размещена не в контролёре а в store или model. А может даже распределена между store и model.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 22.06.2012 в 13:06.
Ответить с цитированием
  #6 (permalink)  
Старый 27.09.2012, 14:17
Новичок на форуме
Отправить личное сообщение для Masat0 Посмотреть профиль Найти все сообщения от Masat0
 
Регистрация: 27.09.2012
Сообщений: 1

Подскажите, пожалуйста, как будет выглядеть чистый MVC с тонким котроллером для следующей задачи.

В зависимости от принадлежности пользователя к определенной группе необходимо показывать различные наборы кнопок на тулбаре. Откуда должно идти обращение к БД на сервере, чтобы получить группу или список доступных компонент и где эти компоненты должны создаваться? в контроллере или в вьюпорте?
Ответить с цитированием
  #7 (permalink)  
Старый 28.09.2012, 19:17
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

я боюсь что вопрос "как должно быть" не уместен, есть только удобно для вас и неудобно.

Если тулбар более менее сложный то его есть смысл выделить в отдельный компонент.

тогда будет две вероятности , либо подключать разные тулбары в зависимости от группы, либо тулбар должен сам заполнить себя кнопками в зависимости от группы (к примеру будут подключены различные наборы items в initComponents вашего тулбара)

нажатие на кнопки обычно обычно стоит слушать в контролёре.

данные для инициализации приложения можно комфортно получить в application это тоже контролёр, но он контролирует всё приложение.

можно пойти дальше и подключать в application тот viewport который содержит только нужные пользователю компоненты.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 28.09.2012 в 20:18.
Ответить с цитированием
  #8 (permalink)  
Старый 01.10.2012, 12:05
Аспирант
Отправить личное сообщение для Allan Stark Посмотреть профиль Найти все сообщения от Allan Stark
 
Регистрация: 24.04.2010
Сообщений: 87

Кстати, так и не разобрался, как скажем в контроллере, контролирующем некоторый вью с гридом и кнопками достучаться в обработчике событий к событию нажатия например кнопки?

Например в контроллере:

Ext.define('App.controller.controller_invoices', {
	extend: 'Ext.app.Controller',
	views: ['view_invoices_list'],
	init: function() {
        this.control({
            'view_invoices_list': {
                itemclick: function(view, record, item, index, e, obj) {
                   // тут обрабатываем клик в гриде 
               }
        });
    }
});


Тут все понятно, контроллер следит за ивентами конкретно в гриде (того, который во вью alias:'view_invoices_list').
А как в init: function() зарегистрировать обработчик клика других интерактивных элементов вью, помимо грида, например произвольной кнопки в панели dockedItems грида ?
Ответить с цитированием
  #9 (permalink)  
Старый 01.10.2012, 13:10
Аспирант
Отправить личное сообщение для Allan Stark Посмотреть профиль Найти все сообщения от Allan Stark
 
Регистрация: 24.04.2010
Сообщений: 87

Разобрался.

Вот это будет работать:

init: function() {
   'view_invoices_list': {
      // тут обрабатываем события в гриде view_invoices_list
   },
   'view_certs_preview_area #print_button': {
      // а тут обрабатываем события в кнопке в панели dockedItems 
   }
}


[off]Честно говоря, начала эта ExtJS меня уже разочаровывать. Вроде и документации навалом, а многие вещи приходится добывать черте-где, в примерах на сторонних сайтах в 10-й странице гуглопоиска, да еще в документации одно и то же разными подходами описывается, попробуй догадайся, какой из них правильный...[/off]
Ответить с цитированием
  #10 (permalink)  
Старый 04.10.2012, 15:54
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Аналогично, элемент разочарования присутствует.

На самом деле, на extjs многие вещи реализуются сложнее чем без него.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 04.10.2012 в 16:53.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование Ext на сайте (где есть свой дизайн) khusamov ExtJS 7 11.01.2013 19:16
не стандартное создание элемента в ext ichisen ExtJS 3 25.04.2012 16:06
Ext Js список seoneo ExtJS 2 21.03.2012 14:58
Ext Desingner mycoding ExtJS 11 02.12.2011 11:44
Как использовать Ext JS и Ext Core вместе? Ichigeki ExtJS 3 04.07.2011 12:10