Как работает трансляция событий в роутере Giraffe?

Я только что открыл подход к роутерам в Giraffe. Можно вызвать события приложения следующим образом:

  маршруты: {
    'childView/:name': 'route:childView'
    // 'someHashLocation/:andItsParams': 'some:appEvent'
  },

Поскольку обычно события маршрутизации обрабатываются функциями обратного вызова, мне интересно, что нужно для запуска этих событий маршрутизации из приложения, не являющегося Giraffe Backbone? Есть ли какие-либо проблемы, с которыми вы сталкиваетесь при отключении маршрутизатора от модулей приложения?

1 ответ

Решение

Поскольку обычно события маршрутизации обрабатываются функциями обратного вызова, мне интересно, что нужно для запуска этих событий маршрутизации из приложения, не являющегося Giraffe Backbone?

Может что-нибудь со ссылкой на роутер cause события маршрутизации, например:

var app = new Giraffe.App({routes: {'post/:id': 'route:post'}});

// Trigger a route with an app reference
app.router.cause('route:post', 42); // => location changes to #post/42
                                    // => 'route:post' triggered on `app`

Giraffe.Router#cause как Backbone.Events#trigger с добавлением навигации к соответствующему маршруту, если таковой существует, и router запускает событие на appне сама.

Все, что имеет ссылку на приложение, может прослушивать событие маршрутизации:

// Handle the route from outside the Giraffe app
app.on('route:post', function(id) {...});

// Other `Backbone.Events` instances can listen to the Giraffe app
var myOtherApp = new Backbone.View;
myOtherApp.listenTo(app, 'route:post', function(id) {...});

Приложение также выступает в качестве удобного концентратора событий помимо событий маршрутизации. Все объекты Giraffe имеют ссылку на this.app (если он был создан) и поддержка ярлыка appEvents привязок.

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

(Я один из авторов) Мы в нашей компании и я по своему личному опыту не нашли в этом проблемы, но можно представить себе ситуации, когда эта система, основанная на событиях, не обеспечивает необходимый уровень координации. Мы рассмотрели возможность улучшения обработки маршрутов с помощью таких функций, как фильтры, но пока не нашли время для этого. Если у вас есть предложения, мы будем рады их услышать!

Другие вопросы по тегам