我正在使用与 ToDo 示例相同的基本路由器代码,但我遇到了一些问题。当我 Router.navigateToItem(itemID) 一切正常。但是,如果我输入直接 URL (/inventory/itemId),则永远不会设置 Session 变量,因此直接 URL 不起作用。我可以弄清楚如何让路由器通过直接 URL 触发。非常感谢帮助。这是我正在使用的代码:
var WebRouter = Backbone.Router.extend({
routes: {
"": "main",
"inventory/:itemId": "itemDetail"
},
main: function () {
Session.set("inventoryItem", null);
},
itemDetail: function(itemId) {
Session.set("inventoryItem", Items.find({_id:itemId}).fetch()[0]);
},
navigateToItem: function(itemId) {
this.navigate("inventory/"+itemId, {trigger: true});
}
});
Router = new WebRouter;
Meteor.startup(function () {
Backbone.history.start({pushState: true});
});
编辑1:
我注意到,如果我不 pushState:
Backbone.history.start();
然后一切似乎都奏效了。但是,然后我的网址中有这个愚蠢的哈希符号,我不知道它来自哪里:/#inventory/WsL7YZxiWk3Cv3CgT
越来越近...我也不确定没有 pushState 会丢失什么...
编辑2:
另一个失败的尝试:
window.onload= function(){
var url = window.location.pathname;
Router.navigate(url.substring(1,url.length), {trigger: true});
console.log(url.substring(1,url.length));
};
我真的以为这个会起作用,但它并没有......