Closed chestozo closed 11 years ago
Кажется полезно, да.
И нет, недостаточно, похоже. У тебя может быть два роута для одного лэйаута.
Например, /inbox
и /folder/12345
.
И нет, недостаточно, похоже. У тебя может быть два роута для одного лэйаута.
Я вот тоже сомневаюсь. А тебе не кажется, что параметры должны в этом смысле рулить?
Т.е. передаётся layout
и params
.
Берём все возможные урлы по layout
.
Пытаемся строить урл по параметрам начиная с первого.
Как только построили: готово.
Тебе говорит что-нибудь слово "биекция"?
нет, но я посмотрю )
Не понял, при чём это здесь )
Ну вот отображение урлов в layout не биекция. Значит без дополнительных данных обратное отображение невозможно. Ну вот, например, есть два роута:
'/folder/NNN' -> 'messages', { fid: NNN }
'/inbox' -> 'messages', { fid: 1 }
Вот у тебя есть 'messages', { fid: 1 }.
Как ты будешь урл строить?
По какому роуту?
'/inbox' -> 'messages', { fid: 1 }
А откуда там fid?
Откуда-то. Это константа, прибитая гвоздями. В нашем конкретном случае из списка фолдеров.
Ну не важно. Пусть будет другой пример, более сложный:
'/folder/NNN' -> 'messages', { fid: NNN }
'/search/TXT -> 'messages', { text: TXT }
и есть у тебя 'messages', { fid: NNN, text: TXT }
— что соответствует поиску по папке NNN.
Ты не забывай, что не все параметры появляются в роутах.
Есть же еще "все остальное".
Типа /folder/123?sort=date
.
Т.е. нам нужен какой-то уникальный идентификтор урла.
Вроде бы, достаточно просто ввести дополнительный параметр рута name
, к примеру, или id
.
Тогда задача становится более топорной, но менее гибкой.
Вообще, хочется использовать этот новый метод вот так:
есть страница просмотра письма, к примеру
есть листалка "след" / "пред"
ссылку на следующее письмо хочется генерить вот так:
ns.router.url('letter-view', no.extend(ns.page.current.params, { id: 2 }))
Я вот подумал, а может на https://github.com/nodules/susanin переехать? Там уже все есть )
Кажется, его нужно обернуть, потому что:
baseDir
layout_id
)Ну т.е. как движок внутри ns.router
можно, но там так мало функционала, что непонятно, зачем тут зависимости плодить.
Susanin точно так же не сможет построить урл /inbox
из fid'а.
@chestozo 1) смутно представляю как реализовать по другому. Делать обратный paramsObject -> pattern матчинг? 2) логично, что это можно делать сверху до susanin 3) доп.данные можно запизать в data для маршрута
@pasaran возможно, что это проблема урлов
1) смутно представляю как реализовать по другому. Делать обратный paramsObject -> pattern матчинг?
Ну мы с @pasaran договорились вроде как до именованных рутов, примерно так:
ns.routes = {
'router-name': {
layout: 'layout-id',
pattern: 'url-pattern'
}
};
ns.router.url('route-name', params);
Да, в susanin тоже susanin.getRouteByName('route-name').build(params)
Мы вроде ни до чего не договорились.
@doochik что будет, если несколько урлов в один route мапятся? Какой из них выберется для построения урла?
такого не бывает, ты берешь роут по имени, в котором только один паттерн
Ну тогда нам не подходит вроде бы.
У нас на messages
может много урлов мапиться.
ты сейчас про какой messages
говоришь?
Леша привел пример, как описывается роут в сусанине:
susanin.addRoute({
'name': 'folder-route',
'pattern': '/folder/<fid>',
'conditions' : {
'fid' : '\\d+'
},
'data': {
layout: 'messages'
}
});
Что мне не нравится:
Как-то так:
router.add([
// простой роут.
'/folder/<num:fid>', 'messages',
'/folder/<fid>', {
layout: 'messages',
conditions: {
fid: '\\d+'
}
]);
Ну, наверное, можно обертку сделать, да.
fixed in #154
Поскольку
ns.router
сейчас основной хранитель данных о том, как парсится урл и какая это страница в итоге, хочется его ещё научить генерировать урлы (чтобы можно было написатьns.router.url('letter-view', { id: 1, folder: 2 })
и получить урл на выходе).Для этого нужно 2 вещи:
layout
и параметрыЕсть ли те, кому это тоже кажется полезным? )