Вопрос по туториалу Ember, почему ссылка http://localhost: 4200 / rentals / grand-old-mansion не работает - PullRequest
0 голосов
/ 06 августа 2020

Я изучаю угольки сейчас. Я следую руководству по созданию веб-приложения.

В части 2 руководства, в разделе «Параметры маршрута» URL-адрес выглядит следующим образом:

https://guides.emberjs.com/release/tutorial/part-2/route-params/

Я обнаружил кое-что странное.

Тестовый пример для приведенной ниже ссылки не прошел.

http://localhost: 4200 / rentals / grand-old-mansion

Я обнаружил, что если я щелкну ссылку из root (т.е. /), он может правильно отобразить аренду.

А затем, если я обновлю sh страницу, это не сработает. Сообщение об ошибке, как показано ниже:

Uncaught (in promise) Error: No model was found for 'rental' and no schema handles the type

Я проверил все файлы, в которых нет ошибки опечатки. В чем проблема?

1 Ответ

3 голосов
/ 06 августа 2020

Ваша проблема, вероятно, в том, что ваш model хук не реализован. Немного контекста для этого:

Здесь важно понимать, что если вы создадите ссылку типа <LinkTo @route="rental" @model={{@rental}}> и нажмете на нее, хук model() на rental заполнит маршрут не выполняться. Вместо этого будет использоваться все, что вы передадите в @model. То же самое верно и при выполнении Router#transitionTo('rental', model).

Так что это работает, потому что у вас уже есть загруженные данные. Однако при перезагрузке выполняется model хук маршрута rental. И поскольку вы этого не реализовали, будет использоваться хук модели по умолчанию. И этот довольно волшебный. Он проверяет имя вашего сегмента Dynami c, то есть rental_id. И если это somethind_id, это будет в основном return this.store.findRecord('something', params.something_id). Итак, в вашем случае хук модели по умолчанию эквивалентен этому:

model(params) {
  return this.store.findRecord('rental', params.rental_id);
}

, но у вас нет модели данных ember с именем rental, поэтому вы получаете сообщение об ошибке:

Ошибка: не была найдена модель для 'проката'

Поэтому, чтобы исправить это, вы должны убедиться, что ваш model хук присутствует и правильно реализован.

Одно важное замечание:

<LinkTo и transitionTo выполнят хук model(), если вы передадите строку или число. Таким образом, вы можете сделать <LinkTo @route="rental" @model={{@rental.id}}>, и выполнит хук модели, используя то, что вы передали в @model как сегмент динамического c, а не значение модели. Я лично видел несколько приложений, которые всегда передают идентификатор, поэтому у них нет ошибки, которую вы не заметили. И лично я бы порекомендовал это.

...