次のようなルートにバックボーンを正しく移動させる方法がわかりません。
ページ/#/チャンネル/名前
それ以外の
ページ#チャンネル/名前
また
ページ番号/チャンネル/名前
私のルーターは 1 つのメイン モデルで動作し、その状態を観察するため、この場合、ルーターはイベントをトリガーすることなく URL を変更できるはずです。
私はこのようにしようとしました:
router.navigate("#/channel/" + encodeURIComponent(appState.data.channelName), { trigger: false });
しかし、この場合、「trigger: false」が機能しなかったため、望ましくないルーター イベントが呼び出されました。
Backbone.history ルートは「/」に設定されており、現在 pushState を使用していません。
以下のコード例を参照してください。
var Router = Backbone.Router.extend({
routes: {
"": "index",
"index": "index",
"channel/:channelName": "changeChannel"
},
initialize: function (options) {
var router = this;
if (options.model) {
router.model = options.model;
} else {
//TODO: throw error
return;
}
//update url in cases of model channelSelection changes
router.model.on("stateChangeAccepted", function (appState) {
switch (appState.mode) {
case "channel":
router.navigate("/channel/"
+ encodeURIComponent(appState.data.channelName), { trigger: false });
break;
}
});
},
index: function () {
var router = this;
router.model.trigger("stateChangeRequest", {
mode: "channel",
data: {
channelIndex: 0
}
});
},
changeChannel: function (channelName) {
var router = this;
router.model.trigger("stateChangeRequest", {
mode: "channel",
data: {
channelName: decodeURIComponent(channelName)
}
});
}
});