2014-12-26 2 views
0

Ниже приводится описание кода ниже:Как отделить код: мой контроллер делает слишком много работы?

  1. маршрутизатора решает, какой метод контроллера для вызова
  2. контроллера получает модель (ы)
  3. контроллера конкретизирует различные представления с моделью
  4. контроллер инстанцирует макет, ставит просмотров в него
  5. контроллер помещает макет в приложение

ли контроллер делает слишком много вещей? Я думаю, хороший способ должен быть

  1. маршрутизатора решает, какой метод контроллера для вызова
  2. контроллера получает модель (ы)
  3. контроллера инстанцирует макет с моделью
  4. контроллер помещает макет в приложение. Завершение работы контроллера
  5. макет при инициализации конкретизирует представления с моделью

Вопрос: Является ли второй подход лучше? Если да, то как это сделать [3. и 5. хорошего пути]?

Кодекс также в jsfiddle

ContactMgr.Router = Marionette.AppRouter.extend({ 
    appRoutes: { 
    'contacts/:id'  : 'detail' 
    } 
}); 

ContactMgr.Controller = Marionette.Controller.extend({ 
    detail: function (id) { 
     var promise = App.request('contact:entities', id); 
     $.when(promise).done(function (contacts) { 
     var _model = contacts.get(id); 

     var contactView = new MyContactView({ model: _model }); 
     var sideView = new MySideView({ model: _model }); 

     var view = new MyLayout(); 
     // MyLayout has mainRegion, sideRegion 
     view.on('show', function (v) { 
      v.getRegion('mainRegion').show(contactView); 
      v.getRegion('sideRegion').show(sideView); 
     }); 

     App.getRegion('contentRegion').show(view); 
     // App has contentRegion, other regions 

     });// when done, end 
    }// detail, end 
}); 
+0

Если этот вопрос закрывается, то вы, вероятно, следует задать на [Программисты Стек Обмен] (http://programmers.stackexchange.com/). Они с удовольствием расскажут о проблемах дизайна. – jww

ответ

0

This может быть ответом.

И

ContactMgr.Controller = Marionette.Controller.extend({ 
    detail: function (id) { 
    ... 
    var _model = contacts.get(id); 
    ... 
    var view = new MyLayout({model: _model}); 
    App.getRegion('contentRegion').show(view); 
    } 
}); 

MyLayout = Marionette.Layout.extend({ 
    ... 
    regions: { 
     mainRegion: '#...', 
     sideRegion: '#...' 
    }, 
    contactView: null, 
    sideView: null, 
    onShow: function() { 
     this.getRegion('mainRegion').show(this.contactView); 
     this.getRegion('sideRegion').show(this.sideView); 
    }, 
    initialize: function (opt) { 
     var _model = opt.model; 
     this.contactView = new Marionette.ItemView({ model: _model }); 
     this.sideView = new Marionette.ItemView({ model: _model }); 
    } 

}); 
Смежные вопросы