Как работает трансляция событий в роутере 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
привязок.
Есть ли какие-либо проблемы, с которыми вы сталкиваетесь при отключении маршрутизатора от модулей приложения?
(Я один из авторов) Мы в нашей компании и я по своему личному опыту не нашли в этом проблемы, но можно представить себе ситуации, когда эта система, основанная на событиях, не обеспечивает необходимый уровень координации. Мы рассмотрели возможность улучшения обработки маршрутов с помощью таких функций, как фильтры, но пока не нашли время для этого. Если у вас есть предложения, мы будем рады их услышать!