ember.js - 处理路线时出错,工厂未定义

标签 ember.js ember-data ember-cli

我尝试通过 RESTAdapter 获取数据(按照教程),但收到一个我不明白的错误。

"Error while processing route: players.index" "factory is undefined" "Store<.modelFor@http://localhost:4200/assets/vendor.js:74981:1

有人知道我错过了什么吗?我需要安装附加组件吗?

routes/players/index.js

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return this.store.find('player');
  }
});

models/player.js

import DS from 'ember-data';

export default DS.Model.extend({
  finalScore: DS.attr('number'),
  name: DS.attr('string'),
  heightFormatted: DS.attr('string'),
  heightCm: DS.attr('number'),
  weightLb: DS.attr('number'),
  weightKg: DS.attr('string'),
  birthplace: DS.attr('string'),
  birthdate: DS.attr('string'),
  neoId: DS.attr('number'),
  position: DS.attr('string'),
  number: DS.attr('string'),
  faults: DS.attr('number'),
  stats: DS.belongsTo('stat')
});

models/stat.js

import DS from 'ember-data';

export default DS.Model.extend({
  points: DS.attr('number'),
  assits: DS.attr('number'),
  defr: DS.attr('number'),
  ofr: DS.attr('number'),
  steals: DS.attr('number'),
  blocks: DS.attr('number'),
  turnovers: DS.attr('number'),
  fta: DS.attr('number'),
  ftm: DS.attr('number'),
  fga: DS.attr('number'),
  fgm: DS.attr('number'),
  lsa: DS.attr('number'),
  lsm: DS.attr('number'),
  minutes: DS.attr('number'),
  isStarter: DS.attr('boolean'),
  gamesPlayed: DS.attr('number'),

  player: DS.belongsTo('player')
});

适配器/application.js

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  host: 'http://localhost:3000',
  namespace: 'api'
});

JSON

{
    "players": [
        {
            "neo_id": 3264,
            "name": "Jeff Green",
            "height_cm": 205,
            "height_formatted": "6'9\"",
            "weight_lb": 235,
            "weight_kg": "106.8",
            "position": "PF",
            "number": "8",
            "birthplace": "Cheverly, Maryland, USA",
            "birthdate": "523843200",
            "stats": {
                "final_score": 344,
                "games_played": 16,
                "minutes": 34.5,
                "points": 19,
                "assits": 1.75,
                "defr": 3.75,
                "ofr": 1,
                "steals": 0.94,
                "blocks": 0.69,
                "turnovers": 1.56,
                "faults": 1.94,
                "neo_id": 3264
            }
        },
        {
            "neo_id": 3265,
            "name": "Erik Murphy",
            "height_cm": 208,
            "height_formatted": "6'10\"",
            "weight_lb": 230,
            "weight_kg": "104.6",
            "position": "PF",
            "number": "-1",
            "birthplace": "Lyon, France",
            "birthdate": "656899200",
            "stats": {}
        }
    ]
}

最佳答案

我无法重现您的确切错误,但根据您共享的内容,我能够通过进行这些更改来使其正常工作。如果您的代码有不同之处请发表评论,我会查看。

序列化器/application.js

由于您使用的是自定义主键(neo_id 而不是 id),因此您可以在此处进行更改,并指示 stats 记录嵌入在 players 中数据:

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs : {
    stats: { embedded: 'always' }
  },
  primaryKey : 'neo_id'
});

Working JSBin

关于ember.js - 处理路线时出错,工厂未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27295725/

相关文章:

javascript - Ember.js - 列出商店中的值

javascript - 在 Ember 中命名和声明嵌套 CRUD 页面的正确方法

javascript - Ember 数据属于协会(JSON 格式?)

ember.js - Ember-Data 中的部分更新?

jquery - 如何使用 ember-cli 在删除之前创建模式确认对话框

javascript - 在每个 Ember 环境中保留具有多个适配器的固定装置

ember.js - 如何在 addObjects 期间删除 ember-data 中的重复记录

javascript - 将 sortBy ('name' ) 放在 Controller 的什么位置?

ember.js - Ember 2 : Truncate text and add ellipses

javascript - 如何在 ember-from-for 中删除包装 div 或将其类型从 div 更改为 span?