2012-06-29 145 views
2

我正在使用devise,rails with backbone。我所有的骨干路线都运行良好。但是应该由rails呈现的非骨干路由(如/ 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的实际请求/响应发生在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; 
    }; 
    } 
}; 

这又是触发我回家的路线。

“”骨干路由不应该是globbing /帐户/登录,但它是。

有一点调试显示/ 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; 
    }, 

任何建议码?

+0

'/ accounts/login'是普通链接还是AJAX?它如何被访问? –

+0

是的。它是一个传统的链接,没有ajax。 – user689541

+0

它返回什么页面? Backbone路由是否被触发? –

回答

0

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