2012-06-30 4 views
4

Я создал веб-приложение, используя backbone.marionette. Когда из Marionette.ItemView, я вызвать событие document.location.hash:Routing.navigate vs document.location.hash

document.location.hash = '#tasks/' + this.model.get('id'); 

1.а) он изменяет URL 1.b) он запускает appRoutes

Если я вызвать Routing.navigate с того же места:

router.navigate('#tasks/' + this.model.get('id')) 

2.а) он изменяет URL, как ожидается 2.b) не запускают appRoutes.

Любая идея, почему происходит 2.b? Где может быть проблема?

Спасибо.

var Router = Marionette.AppRouter.extend({ 
    appRoutes: { 
     'tasks': 'tasks', 
     'tasks/:id': 'taskDetail', 
     '*defaults': 'tasks' 
    } 
}); 

ответ

9

Вам нужно добавить {trigger: true}

router.navigate('#tasks/' + this.model.get('id'), {trigger: true}) 

Вообще я продлить маршрутизатор, а затем добавить свой собственный Navigate, который автоматически добавляет, что {trigger: true}. Я понимаю, почему разработчики сделали это так, но это не так, как я когда-либо использовал :)

+0

Спасибо, на самом деле этот вопрос связан с этим: [Круговые зависимости для веб-приложения с использованием backbone.marionette и requireJs] (http://stackoverflow.com/questions/11265332/circular-dependencies-for-a-web-app-using-backbone-marionette-and-requirejs). И я хотел бы знать, как я могу достичь той же цели, что и события. –