Магистральный маршрутизатор не работает с pushState
Я хочу, чтобы каждый запрос страницы перенаправлялся на мой index.html
, и любая ссылка (не #urls -/real/urls), нажатая в моем приложении, чтобы пройти через router.js
, поэтому есть по существу, не обновляется страница - чисто аякс. Есть ли простой способ сделать это с помощью магистральной маршрутизации и htaccess?
Я работаю в данный момент, если уберу {pushState: true}
и отформатирую свои ссылки, например #login
. Однако, когда я включаю pushState
и нажимаю #login
, ничего не происходит. Вместо этого, только один раз я обновляю страницу, которую Backbone интерпретирует #login
и следует за маршрутом для рендеринга loginView
.
Вот мой маршрутизатор:
// Filename: router.js
define( [ 'views/beta/requestInvite', 'views/beta/login' ],
function(requestInviteView, loginView) {
var AppRouter = Backbone.Router.extend( {
routes : {
// Pages
'login' : 'login',
// Default
'*actions' : 'defaultAction'
},
// Pages
login : function() {
loginView.render();
},
defaultAction : function(actions) {
requestInviteView.render();
}
});
var initialize = function() {
var app_router = new AppRouter;
Backbone.history.start({pushState: true});
};
return {
initialize : initialize
};
});
То, что я хотел бы произойти, находится в requestInviteView
, когда нажата ссылка на /login
, url изменяется на /login
и отображается loginView
.
Спасибо за любую помощь!
Ответы
Ответ 1
Переход от хеша к pushstate не является тривиальным, как изменение одного параметра, как можно заставить думать. То, что я делаю, это захватить событие click в моем представлении и вызвать app.navigate для запуска маршрута.
app.navigate("/login", {trigger: true});
http://backbonejs.org/#Router-navigate
Ответ 2
Хотя ответ Энтони будет работать, использование trigger: true
обычно не является лучшим способом. Вместо этого ваше приложение должно быть структурировано, чтобы вы могли вызвать navigate
со значением по умолчанию trigger
, оставшимся до false
.
Дерик Бэйли рассказывает о проблеме в своем блоге на http://lostechies.com/derickbailey/2011/08/28/dont-execute-a-backbone-js-route-handler-from-your-code/ (параграф "Момент AHA!" в отношении маршрутизатора. Обозначает второй аргумент ")
Кроме того, целая глава, объясняющая маршрутизацию более подробно (в том числе, почему вы должны оставить trigger
до false
), можно бесплатно загрузить в этом примере в pdf-книге: http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf (полное раскрытие: я автор книги)