バックボーン付きのデバイス、レールを使用しています。すべてのバックボーン ルートは正常に機能しています。ただし、レールによってレンダリングされるはずの /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 ログから発生しています。しかし、バックボーンのホーム ルートが後でトリガーされ、ホームページがレンダリングされます。
私のレイアウトは
$(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;
},
助言がありますか?