магистральный маршрутизатор, объединяющий немагистральные маршруты

Я использую 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;
    },

Какие-либо предложения?


person user689541    schedule 29.06.2012    source источник
comment
/accounts/login это обычная ссылка или AJAX? Как к нему получить доступ?   -  person mu is too short    schedule 30.06.2012
comment
да. Это традиционная ссылка, без ajax.   -  person user689541    schedule 30.06.2012
comment
И с какой страницы он возвращается? Там срабатывает маршрут Backbone?   -  person mu is too short    schedule 30.06.2012
comment
Отрисовывается домашняя страница. По какой-то причине /account/login совпадает с магистральным маршрутом.   -  person user689541    schedule 30.06.2012
comment
Можете ли вы показать нам код перехода к /accounts/login?   -  person jakee    schedule 02.07.2012
comment
/accounts/login — это прямая ссылка в html. Что-то вроде ‹a href='/accounts/login'› Войти ‹/a›   -  person user689541    schedule 04.07.2012
comment
Я занимаюсь этой проблемой прямо сейчас. Вы нашли решение? Будем очень признательны за любую помощь!   -  person threejeez    schedule 13.08.2012
comment
а что содержит ProvidersRouter?   -  person Eru    schedule 19.10.2012


Ответы (1)


Добавьте к ссылке атрибут class («passThrough») или data-passThrough=true. Перехватите этот класс/атрибут в вашем роутере и верните true, чтобы Backbone перестал его обрабатывать и браузер обработал его как обычную ссылку.

person mcrider    schedule 04.01.2013