我想了解CanJS的路由。到目前为止,我已经设置了以下路线。
can.route('plant/:plant/', {
plant : undefined,
day : undefined
});
can.route('plant/:plant/day/:day', {
plant : undefined,
day : undefined
});
我还没有设置听众,因为我只是在控制台中尝试这个。以下工作正常:
can.route.attr({plant : 1}) // ==> #!plant/1/
can.route.attr({plant : 1, day : 3}) // ==> #!plant/1/day/3
但是在我这样做之后,我想触发一个事件在层次结构中“向上”,回到#!/ plant / 1级别。我试过做can.route.attr({plant : 1, day : undefined})
但是没有做任何事。 can.route.attr({plant : 1, day : null})
刚刚导致#!plant/1/day/null
。
那么如何“重置”路线到现在“知道”它到底是哪一天?
答案 0 :(得分:0)
在我了解到can.route
基本上就是所谓的Observable
后,我明白我实际上要做的就是删除一个属性。要做到这一点,所有人必须做的是
can.route.removeAttr('day') // ==> #!plant/1/
答案 1 :(得分:0)
我遇到了同样的问题,并想在此处记录。实现此目的的更好方法是使用can.route.url
方法生成适当的路由URL。不幸的是,canjs没有实现routeTo
方法,它会抽象掉以下代码(并且还可以确定在可用时是否使用pushstate ......):
can.route('plant/:plant');
can.route('plant/:plant/day/:day');
window.location.hash = can.route.url({plant: 1}); // #!plant/1
window.location.hash = can.route.url({plant: 1, day: 2}); // #!plant/1/day/2
理想情况下,我们应该能够做到这样的事情:
can.routeTo({plant: 1});
// #!plant/1 (without pushstate)
// [root]/plant/1 (with pushstate)
注意:我将在接下来的几周内构建此功能,并可能会发送拉取请求。