主干路由器导航到../#/<路由>而不触发路由器事件.如何
Backbone router navigate to .../#/<route> without triggering router event. How to?
不知道如何强制骨干网正确导航到这样的路由:
页面/#/频道/名称
而不是
页面#频道/名称
或
页面#/频道/名称
我的路由器使用一个主模型并观察其状态,因此在这种情况下,路由器应该能够在不触发其事件的情况下更改 URL。
我试着这样做:
router.navigate("#/channel/" + encodeURIComponent(appState.data.channelName), { trigger: false });
但在这种情况下,"触发器: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)
}
});
}
});
您的
router.navigate
呼叫与您定义的路由不匹配:
routes: {
"": "index",
"index": "index",
"channel/:channelName": "changeChannel"
},
这意味着频道的 URL 应http://host.com/#channel/someChannel
。但是,您的路由器导航调用要么是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 });
相关文章:
- 如何使用带有Preact的React路由器
- 如何建立一个网页,检查我的路由器网络接口是否可以访问
- 如何定义和渲染子菜单项,使用Aurelia's路由器
- 在Angular ui路由器中,如何将事件从一个视图发送到另一个视图
- 如何使用服务器上的react路由器处理所有可能的路由
- 如何加载嵌套3个状态的UI路由器UI视图模板
- 如何使用js代码转发reactjs路由器
- 如何减少骨干路由器中的重复代码
- 使用vue路由器,我如何才能使菜单选择的样式
- Angular/UI路由器-如何在不刷新所有内容的情况下更新URL
- 主干路由器:如何设置hrefs连接到路由器
- Angular ui路由器:如何阻止访问一个状态
- 流星铁路由器 - 如何等待(使用加载模板)一个会话.get
- 反应路由器如何从客户端向服务器中间件发送请求
- Meteor Iron路由器如何获取POST数据
- AngularJS/UI路由器:如何使用一个具有多个命名视图的控制器
- AngularJS UI路由器:如何获得“;“父”;州到所有州
- React/Flux/React路由器:如何在重新路由时调用以存储数据
- Angular2路由器:如何从父路由到子路由共享一个值
- js路由器如何使用纯js指定参数