gpt4 book ai didi

javascript - 主干路由器导航到 .../#/ 而不触发路由器事件。如何?

转载 作者:行者123 更新时间:2023-11-30 06:41:09 25 4
gpt4 key购买 nike

不知道如何强制 Backbone 正确导航到这样的路线:

page/#/channel/name

代替

page#channel/name

page#/channel/name

我的路由器使用一个主要模型并观察其状态,因此在这种情况下路由器应该能够更改 URL 而无需触发其事件。

我试过这样做:

router.navigate("#/channel/" + encodeURIComponent(appState.data.channelName), { trigger: false });

但在这种情况下,“trigger: false”不起作用,所以我收到了不希望的路由器事件调用。

Backbone.history root 设置为“/”,我目前没有使用 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)
}
});

}
});

最佳答案

您的 router.navigate 调用与您定义的路由不匹配:

routes: {
"": "index",
"index": "index",
"channel/:channelName": "changeChannel"
},

这意味着 channel 的 URL 应该是 http://host.com/#channel/someChannel。但是,您的 router.navigate 调用是 router.navigate('#/channel...)router.navigate('/channel...)。应该是:

router.navigate("channel/" + encodeURIComponent(appState.data.channelName), { trigger: false });

但是,如果您想使用像 http://host.com/#/channel/someChannel 这样的路由,那么您的路由应该是:

routes: {
"": "index",
"index": "index",
"/channel/:channelName": "changeChannel"
},

你的导航调用应该是:

router.navigate("/channel/" + encodeURIComponent(appState.data.channelName), { trigger: false });

关于javascript - 主干路由器导航到 .../#/<route> 而不触发路由器事件。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11187829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com