Исправление неверного именования маршрутов - PullRequest
1 голос
/ 22 апреля 2019

В настоящее время я работаю над приложением CRUD - на данный момент я создал маршрут index, маршрут show и create и перешел к созданию метода update.Я пошел дальше и добавил маршрут, шаблон и контроллер, но всякий раз, когда я пытаюсь щелкнуть ссылку на мой новый шаблон, я получаю сообщение об ошибке, сообщающее мне следующее:

This link-to is in an inactive loading state because at least one of its parameters presently has a null/undefined value, or the provided route name is invalid.

Я ссылаюсь на путь обновления через страницу шоу и могу подтвердить, что ID, который я передаю в функцию link-to, существует.В таком случае, я думаю, что с моим названием маршрута что-то не так, но не могу понять, где я ошибаюсь.Я предполагаю, что это вероятно что-то не так с вложенными маршрутами.

Я попытался изменить порядок своих маршрутов и поместил операторы журнала консоли в контроллер, который я ожидал выполнить после того, как был достигнут оператор link-to - до сих пор я не вошел в контроллер.

app/router.js

import EmberRouter from '@ember/routing/router';
import config from './config/environment';

const Router = EmberRouter.extend({
  location: config.locationType,
  rootURL: config.rootURL
});

Router.map(function() {
  this.route('about');
  this.route('contact');
  this.route('posts', function() {
    this.route('post');
    this.route('show', { path: '/:post_id' });
    this.route('edit', { path: '/:post_id/edit' });
    this.route('destroy', {path: ':post_id/destroy'});
  });
});

export default Router;

apps/routes/posts/edit.js

import Route from '@ember/routing/route';

export default Route.extend({
  model(params) {
    console.log('hit this when edit route is hit')
    return this.store.findRecord('post', params.post_id);
  }
});

app/templates/post/show.hbs

<div class="jumbo show-posts">
 ...
</div>
{{log this.model.id}}
  <div class="col-sm-offset-2 col-sm-10">
    <h3>{{#link-to "post.edit" post class=this.model.id}}Update post{{/link-to}}</h3>
  </div>
{{outlet}}
...

1 Ответ

2 голосов
/ 22 апреля 2019

Вы упомянули неправильное название маршрута. Это должно быть posts.edit в соответствии с вашим router.js. Вы должны передать хотя бы один параметр на маршрут post.edit.

Взгляните на мою работу тлеющий уголь

Поскольку вы упомянули this.route('edit', { path: '/:post_id/edit' }), маршрут будет ожидать хотя бы одного из его параметров :post_id.

Изменить вас {{link-to}}, как показано ниже,

{{#link-to "posts.edit" this.model.id}}Update post{{/link-to}}

Вы можете получить доступ к идентификатору записи в вашем контроллере через params.post_id,

model(params) {
  console.log('hit this when edit route is hit')
  return this.store.findRecord('post', params.post_id);
}
...