Лучшие практики Sencha Touch MVC - PullRequest
6 голосов
/ 11 июня 2011

Я пытаюсь сосредоточиться на MVC-структуре Sencha Touch, но я нахожу пару разных подходов.В одном, найденном здесь , есть подход к структурированию приложений Sencha Touch, представленных на SenchaCon 2010. Он имеет дополнительный вес, будучи сотрудником Sencha Touch, но ему уже несколько месяцев.В других, более поздних публикациях о Sencha Touch MVC, у них есть учебники (такие как here , а также MEAP Sencha In Action Мэннинга в исполнении Джея Гарсиа), которые, кажется, полагаются на Ext.Отправка в представлениях для вызова определенных методов контроллера, передача дополнительных элементов в контроллер, что делает контроллер представления осведомленным.

У меня вопрос, который считается наилучшей практикой для структурирования приложения Sench Touch MVC?

Ответы [ 2 ]

6 голосов
/ 20 октября 2011

У меня были похожие вопросы. Sencha автоматизирует большую часть создания геттеров для ваших экземпляров компонентов представления. Это очень запутанно.

В качестве примера я взял Sencha Touch 2.0 и собрал полное приложение MVC. Я основал его на архитектуре ExtJS 4.0 MVC. Это будет работать из коробки с приложением Sencha Touch 2.0 Preview Preview и сэкономит вам массу времени.

https://github.com/FrancisShanahan/SenchaTouch2MVCHelloworld

Чтобы ответить на ваш конкретный вопрос, последняя архитектура ExtJS 4.0 MVC настраивает прослушиватели на экземпляры компонентов представления в событии init контроллера. Вот пример, взятый из уже связанного проекта github:

Ext.define('HelloWorld.controller.Home', {
    extend: 'Ext.app.Controller',   
    views: ['Home', 'SimpleList'],
    .. etc... 
    init: function() {
        // Start listening for events on views
        this.control({
                 // example of listening to *all* button taps
                 'button': { 'tap': function () {
            console.log('Every button says Hello world');
        } 
    ...

Дайте мне знать, если это поможет, С уважением, -fs

3 голосов
/ 03 июля 2011

Я предлагаю сделать ваши контроллеры осведомленными.Когда контроллер получает событие диспетчеризации, у вас должно быть что-то похожее на следующее:

this.controllerViewOne = this.controllerViewOne
                         || this.render({
                                 xtype: 'panel',
                                 listeners: {
                                      onMajorUIAction : function(params){
                                           Ext.Dispatch({ 
                                                controller : 'ProperController',
                                                action     : 'ProperAction',
                                                historyUrl : 'ProperHistoryUrl',
                                                params : params
                                           });
                                      }
                                 }
                            });

Это дает дополнительное преимущество, заключающееся в том, что все прослушиватели "Main" для каждого из представлений контроллеров находятся в одном пространстве.Это также означает, что повторное использование представлений для других контроллеров становится проще.

Все ваши представления должны иметь слушателей, которые помогают абстрагироваться от сложностей отдельных компонентов и их событий / слушателей.

Я использую менеджер пользовательского интерфейсадля глобальных изменений пользовательского интерфейса, таких как скрытие / отображение главной панели инструментов или отображение кнопки «Назад».

...