Backbone.js предоставляет метод navigate(fragment, [options])
для своих объектов Backbone.router, который делает следующее (согласно документации):
Всякий раз, когда вы достигаете точки в своем приложении, которую хотите сохранить как URL-адрес, вызовите
navigate
, чтобы обновить URL-адрес. Если вы хотите также вызвать функцию маршрута, установите для параметраtrigger
значениеtrue
. Чтобы обновить URL-адрес без создания записи в истории браузера, установите для параметраreplace
значениеtrue
.
Таким образом, простой вызов appRouter.navigate('page');
предположительно изменит URL-адрес на www.myapp.com/page
без активации соответствующего маршрута. Однако я обнаружил, что мой маршрутизатор перенаправляет на URL-адрес а также запускает маршрут страницы, несмотря на то, что по умолчанию trigger=false
.
Таким образом, следующий код:
$(function(){
var AppRouter = Backbone.Router.extend({
routes: {
'': 'home',
'page': 'page',
},
home: function() {
window.app.navigate('page', {replace: true});
console.log('home route');
},
page: function () {
console.log('page route');
},
});
window.app = new AppRouter();
Backbone.history.start({pushState: true});
});
производит следующий вывод консоли при переходе на www.myapp.com:
> home route
> page route
когда ожидаемый вывод консоли должен быть просто:
> home route
Похоже, метод не подчиняется параметру trigger
по умолчанию. Это ошибка в реализации или я что-то не понимаю?
trigger: false
? - person jakee   schedule 26.06.2012window.app.navigate('page', {trigger: false, replace: true});
по-прежнему ведет себя так же. Как иwindow.app.navigate('page');
. - person Matm   schedule 26.06.2012pushState: true
сBackbone.history.start
и попробуйте с исходным вызовом навигации. Я погуглил, и может быть связь междуpushState: true
иnavigate
не работает должным образом. - person jakee   schedule 26.06.2012pushState: true
. Действительно ли это ошибка в реализации? - person Matm   schedule 26.06.2012