Есть ли способ остановить магистральный маршрутизатор?

Можно ли закрыть или остановить магистральный маршрутизатор от прослушивания определенных им маршрутов?

Я спрашиваю, потому что тестировал Backbone SubRoute (https://github.com/ModelN/backbone.subroute), создание приложения с большим количеством областей, в которых у пользователя может быть запущено множество подприложений.

Таким образом, я определил структуру основного маршрутизатора и подмаршрутизатора, которая примерно следующая:

   MainRouter = Backbone.Router.extend
    routes:
      "":"root"
      "spaces/:id/:module(/*subroute)":"invokeModule"

    root: () ->
      console.log "root trigger"

    invokeModule: (id, module, subroute) ->
      that = this
      GigaApp.module(module).start({nested_root: "spaces/#{id}/#{module}"})

  SubAppRouter = Backbone.SubRoute.extend
    routes:
      "":"app_home"

    app_home: () ->
      console.log 'at sub app home'

  SubApp.on "start", (options) ->
    SubApp.router = new SubAppRouter(options.nested_root)

Эта общая структура работает с первой инициализации подприложения для пространства, поскольку MainRouter запускает SubApp, который инициализирует свой маршрутизатор с правильным вложенным маршрутом. Впоследствии другие маршруты, определенные в SubAppRouter, также вызывают штраф.

Однако, если вы перейдете к другому пространству (с другим идентификатором) и вернетесь к первому пространству, эта структура сломается, потому что SubAppRouter, уже инициализированный для этого пространства, переопределяет MainRouter, и вызов запуска SubApp не выполняется из MainRouter. .

Итак, мне интересно, есть ли способ остановить или отключить отвязку запуска маршрута магистрального маршрутизатора.


person jay    schedule 23.09.2013    source источник


Ответы (2)


На данный момент ответ НЕТ

Дерик Бэйли открыл этот выпуск в репозитории Backbone, предложив некоторые изменения в структуре backbone для поддержки таких изменений: https://github.com/jashkenas/backbone/pull/1630

Затем последовало обсуждение достоинств такого изменения, где было отмечено следующее:

Для начала — боюсь, я не понимаю предпосылку здесь. Есть пара аксиом маршрутизации, которые противоречат этому патчу:

Маршрутизаторы существуют для сопоставления URL-адресов с местоположениями в вашем приложении.

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

Я также просмотрел исходный код Backbone, и нет никаких указаний на то, что функциональность, о которой я думаю, возможна.

person jay    schedule 24.09.2013

Мне любопытно, почему вы не используете AppRouter в марионетке? Это должно решить ваши проблемы с разделением маршрутов на более мелкие объекты AppRoute...

Взгляните на BackboneRails, где можно увидеть несколько скринкастов по созданию крупномасштабных приложений. Это актуально не только для разработчиков, использующих рельсы в качестве бэкенда. Это отличный способ разместить структуру вашего приложения в модулях (каждый со своими собственными маршрутами приложений). Настоятельно рекомендуется.

person Jakob Dam Jensen    schedule 23.09.2013
comment
привет Якоб. Спасибо за ваш ответ, я попробую AppRouter, нет причин, по которым я еще не использую его, кроме того, что я изучаю/пробую Marionette в первый раз. - person jay; 23.09.2013
comment
Достаточно справедливо =) - Дайте мне знать, если я могу вам чем-то помочь. Это отличная библиотека, и я очень рекомендую смотреть скринкасты на BackboneRails. Мне очень помогло, и это дает вам возможность структурировать ваше приложение. - person Jakob Dam Jensen; 23.09.2013
comment
Спасибо, я найду время посмотреть их на этой неделе. AppRouter — это приятный, DRYer способ (кажется) запуска маршрутизации в приложении Marionette, поскольку он устраняет необходимость в нескольких действиях маршрутизатора, которые просто функционируют для вызова одного действия контроллера. Тем не менее, я все еще думаю, что мне нужна вложенная маршрутизация - чтобы маршрутизаторы подприложений прослушивали свои маршруты, игнорируя сегмент basespaces/:id маршрута. Тем не менее, я буду продолжать оценивать AppRouter, возможно, я слишком усложняю ситуацию. - person jay; 24.09.2013