骨干路由器通配非骨干路由

时间:2012-06-29 22:43:32

标签: ruby-on-rails backbone.js backbone-routing

我正在使用装备,带有主干的导轨。我所有的骨干路线都运转正常。但是应该由rails呈现的/ backbone / 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的实际请求/响应来自rails日志。但是Backbone home root会在之后被触发,我的主页会被渲染。

我的布局有

  $(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被“”吞噬,因为片段是一个空字符串。

在骨干路由不匹配的所有情况下,片段都是空字符串。

来自主干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;
    },

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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