Что является преимуществом Marionette AppRouter + Controller over Backbone.Router? - программирование
Подтвердить что ты не робот

Что является преимуществом Marionette AppRouter + Controller over Backbone.Router?

По моему мнению, отличия в том, что функции обратного вызова для событий на AppRouter должны существовать в Controller вместо того же самого объекта Router. Также существует взаимно-однозначная взаимосвязь между такими AppRouter и контроллерами, все мои коды от Router теперь переходят к контроллеру, я не вижу слишком много этого? Так зачем их использовать? Мне что-то не хватает?

4b9b3361

Ответ 1

Как я вижу это, нужно разделить проблемы:

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

Таким образом, если вы находитесь на начальной странице своего приложения, он должен работать нормально, не требуя каких-либо маршрутизаторов: ваши действия (например, нажатие на запись в меню) просто запускают различные действия контроллера.

Затем вы добавляете на маршрутизатор сообщение "если этот URL-адрес вызывается, выполните это действие контроллера". И внутри вашего контроллера вы обновите отображаемый URL с помощью navigate("my_url_goes_here"). Обратите внимание, что вы не проходите trigger: true.

Для получения дополнительной информации просмотрите сообщение в блоге Derick http://lostechies.com/derickbailey/2011/08/28/dont-execute-a-backbone-js-route-handler-from-your-code/ (параграф "Момент AHA!" в отношении маршрутизатора. Обозначает второй аргумент")

Я также затронул тему более подробно в бесплатном предварительном просмотре моей книги о Marionette. См. Стр. 32-46: http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf

Ответ 2

Я сделал несколько переопределений для маршрутизатора. И в настоящее время использовать его таким образом (например, Чаплин): https://gist.github.com/vermilion1/5525972

appRoutes : {
  // route : controller#method
  'search' : 'search#search'
  '*any'   : 'common#notFound'
},

initialize : function () {
  this.common = new Common();
  this.search = new Search();
}