can.routing : запуск перехода с #!/foo/bar на #!/foo

Я пытаюсь понять маршрутизацию 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.

Итак, как мне «сбросить» маршрут, чтобы теперь «знать» что-нибудь о том, какой сегодня день?


person oligofren    schedule 16.10.2013    source источник


Ответы (2)


После того, как я узнал, что can.route по сути является тем, что известно как Observable, я понял, что на самом деле я пытался удалить атрибут. И чтобы сделать это, все, что нужно сделать, это

can.route.removeAttr('day') // ==> #!plant/1/
person oligofren    schedule 16.10.2013

Я столкнулся с этой же проблемой и хотел задокументировать это здесь. Лучший способ реализовать это — использовать метод 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)

ПРИМЕЧАНИЕ. Я создам это в ближайшие пару недель и могу отправить запрос на включение.

person Ryan Wheale    schedule 07.11.2013