Ember, измените текущий URL и цели LinkTo без перезагрузки данных

Как изменить URL-адрес и компоненты LinkTo без перезагрузки данных?

Нарисуйте приложение, в котором пользователь может изменить название своего проекта. Текущий URL-адрес содержит название проекта, поэтому его необходимо обновить. Ничего, кроме URL-адреса и ссылок, не должно быть изменено (без перезагрузки данных)

Рассмотрим этот основной маршрут:

this.route('routeName', { path: '/:project_name/:param2/:param3' }, function () {
  ...many sub routes
});

Метод replaceURL позволяет изменить URL:

this.router.location.replaceURL(urlWithNewProjectName)

Пример использования LinkTo (модель не указана, используются значения по умолчанию):

{{#LinkTo 'routeName'}}link{{/LinkTo}}

Например, следующее не работает:

// this code in the router has no effect on LinkTo in templates.
const params = this.paramsFor(this.routeName);
params.project_name = "newName";

Компоненты LinkTo продолжают ориентироваться на старые URL-адреса. Как изменить значение динамического сегмента по умолчанию для маршрута?


person Slim    schedule 10.10.2019    source источник
comment
Можете ли вы привести пример <LinkTo />? Мой первый инстинкт здесь заключается в том, что вы передаете model этому помощнику, который содержит имя старого проекта.   -  person jrjohnson    schedule 11.10.2019
comment
LinkTo не получил ни одной модели. Есть ли способ обновить один раз для всех ссылок текущие значения динамического сегмента, чтобы отразить изменение URL-адреса?   -  person Slim    schedule 15.10.2019
comment
Извините, что заставил вас снова ходить по кругу, но не могли бы вы также добавить свой файл app/router.js, где указана эта ссылка. Если вы не передаете какой-либо динамический контент в LinkTo, то я не уверен, где имя проекта попадает в URL-адрес.   -  person jrjohnson    schedule 15.10.2019
comment
Нет проблем, добавлю в вопрос   -  person Slim    schedule 16.10.2019


Ответы (1)


Вам необходимо передать динамические сегменты компоненту LinkTo в шаблоне. Когда эти реквизиты изменятся, ссылка будет обновлена. Дополнительную информацию см. в руководствах, начинающихся здесь: https://guides.emberjs.com/release/templates/links/#toc_example-for-multiple-segments

person Patrick Berkeley    schedule 16.10.2019
comment
Спасибо, Патрик. Я конкретно спрашиваю, как изменить значение динамического сегмента по умолчанию для маршрута? Таким образом, все LinkTo будут обновлены. Когда для ссылок не предоставляется модель, кажется, что они используют последние динамические сегменты, проанализированные из URL-адреса. - person Slim; 17.10.2019
comment
Динамическое изменение / сегментов пути не является общепринятым. Я думаю, вы ищете параметры запроса. Таким образом, вы должны удалить path: '/:project_name/:param2/:param3' из своего router.js. И используйте параметры запроса вместо ?project_name=blah&param2=asdf&param3=wef. - person Patrick Berkeley; 17.10.2019