Я использую devise, рельсы с магистралью. Все мои магистральные маршруты работают нормально. Но немагистральные маршруты, такие как /accounts/login, которые должны обрабатываться рельсами, замещаются магистральным маршрутизатором.
SS.Routers.ApplicationRouter = Backbone.Router.extend({
initialize: function() {
this.el = $("#content");
},
routes: {
"": "home"
},
"home": function () {
console.debug("Got home request");
var view = new SS.Views.Home();
this.el.empty().append(view.render());
}
});
Фактический запрос/ответ на /accounts/login происходит из журналов рельсов. Но после этого срабатывает домашний корень Backbone, и моя домашняя страница отображается.
Мой макет имеет
$(function () {
SS.init();
});
от
window.SS = {
Models: {},
Collections: {},
Views: {Providers: {}},
Routers: {},
init: function (data) {
console.debug("Initializing Backbone Components");
new SS.Routers.ApplicationRouter();
new SS.Routers.ProvidersRouter();
if (!Backbone.history.started) {
Backbone.history.start();
Backbone.history.started = true;
};
}
};
Что снова запускает мой домашний маршрут.
Маршрут "" в магистрали не должен быть подстановочным /accounts/login, но это так.
Небольшая отладка показывает мне, что /accounts/login поглощается "", поскольку фрагмент представляет собой пустую строку.
И фрагмент представляет собой пустую строку во всех случаях, когда нет соответствия для магистральных маршрутов.
Код из магистрали 0.9.2
loadUrl: function(fragmentOverride) {
var fragment = this.fragment = this.getFragment(fragmentOverride);
var matched = _.any(this.handlers, function(handler) {
if (handler.route.test(fragment)) {
console.debug(handler);
console.debug(fragment);
handler.callback(fragment);
return true;
}
});
return matched;
},
Какие-либо предложения?
/accounts/login
это обычная ссылка или AJAX? Как к нему получить доступ? - person mu is too short   schedule 30.06.2012/accounts/login
? - person jakee   schedule 02.07.2012