如何在Ember模板中显示API响应?

时间:2019-04-12 21:34:47

标签: ember.js ember-data ember-cli

我正在使用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}}时,什么都不会显示。

我是否无法通过某种方式将对象传递给模板?我是在错误地引用它吗?

2 个答案:

答案 0 :(得分:1)

将模型挂钩替换为

model() {
  return this.store.find('world', '5cb0f8bd3b74cf22b75e1a37');
}

答案 1 :(得分:1)

正如评论中已经提到的那样,您错过了返回路线model的机会。因此,即使您的undefined请求通过预期记录正确解析,路由的模型也为store.find()