2

我正在使用设计,带骨干的导轨。我所有的主干路由都工作得很好。但是像 /accounts/login 这样应该由 rails 渲染的非骨干路由正在与骨干路由器一起使用。

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 的实际请求/响应来自 rails 日志。但是之后会触发 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;
    },

有什么建议么?

4

1 回答 1

0

将类 ('passThrough') 或 'data-passThrough=true' 属性添加到链接。在您的路由器中捕获此类/属性并返回 true,以便 Backbone 停止处理它并且浏览器将其视为常规链接。

于 2013-01-04T07:08:52.793 回答