0

我想了解 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

那么我如何“重置”路线以现在“知道”关于今天是哪一天的任何信息?

4

2 回答 2

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)

注意:我将在接下来的几周内构建它,并且可能会发送拉取请求。

于 2013-11-07T01:36:19.660 回答
0

在我了解到这can.route基本上就是所谓的之后,Observable我明白我实际上想要做的是删除一个属性。而要做到这一点,一个人所要做的就是

can.route.removeAttr('day') // ==> #!plant/1/
于 2013-10-16T09:58:01.133 回答