Я использую Ember для извлечения определенной записи из REST API и отображения ее в шаблоне. Я могу консольно записать данные из моего сериализатора, и он правильно отобразит объект, но мой шаблон не может получить к нему доступ.

Полезная нагрузка имеет следующую структуру:

{ 
  _id: 5cb0f8bd3b74cf22b75e1a37,
  name: 'Mu',
  hour: 0,
  day: 0,
  week: 0,
  month: 0,
  year: 753,
  size: 1,
  detail: 1,
  createdAt: 2019-04-12T20:44:45.691Z,
  updatedAt: 2019-04-12T20:44:45.691Z,
  __v: 0 
}

Мой тёмный маршрут выглядит так:

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

export default Route.extend({
  model() {
    this.get('store').find('world', '5cb0f8bd3b74cf22b75e1a37');
  },
})

Мой адаптер выглядит так:

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  host: 'http://localhost:3000',
  pastForType() {
    return 'worlds';
  },
});

Вот моя тёмная модель для миров:

import Model from 'ember-data/model';
import DS from 'ember-data';

const { attr } = DS;

export default Model.extend({
  name: attr('String'),
  hour: attr('Number'),
  day: attr('Number'),
  week: attr('Number'),
  month: attr('Number'),
  year: attr('Number'),
  size: attr('Number'),
  detail: attr('Number')
});

Полезная нагрузка нормализуется моим сериализатором:

import DS from 'ember-data';

export default DS.RESTSerializer.extend({
  primaryKey: '_id',

  normalizeResponse(store, primaryModelClass, payload, id, requestType) {
    payload = { worlds: payload };
    console.log(payload);
    return this._super(store, primaryModelClass, payload, id, requestType);
  }
});

Когда маршрут вызывается, консоль выводит это:

Object { worlds: {…} }

Данные внутри объекта верны, но когда я пытаюсь получить доступ к {{model.name}} в шаблоне моего руля, ничего не отображается.

Я не могу передать объект в шаблон как-то? Я просто ссылаюсь на это неправильно?

0
DJ_Beardsquirt 13 Апр 2019 в 00:34

2 ответа

Лучший ответ

Как уже упоминалось в комментарии, вы пропустили возвращение в своем хуке маршрутов model. Поэтому модель маршрута undefined, даже если ваш store.find() запрос корректно разрешается с ожидаемой записью.

1
jelhan 13 Апр 2019 в 09:47

Замените вашу модель крючком,

model() {
  return this.store.find('world', '5cb0f8bd3b74cf22b75e1a37');
}
1
rinold simon 13 Апр 2019 в 04:18