【问题标题】:Ember relationship: TypeError: Cannot set property 'store' of undefinedEmber 关系:TypeError:无法设置未定义的属性“存储”
【发布时间】:2014-04-03 17:41:59
【问题描述】:

我的第一个带有 Node.JS 后端的 Ember.js 应用程序出现以下错误:

Intermediate-transitioned into 'loading' ember-1.5.0.js:3521
Error while loading route: TypeError: Cannot set property 'store' of undefined
at DS.Store.Ember.Object.extend.modelFor (http://127.0.0.1:5555/js/libs/ember-data.js:2986:31)
at DS.Store.Ember.Object.extend.recordForId (http://127.0.0.1:5555/js/libs/ember-data.js:2437:29)
at deserializeRecordId (http://127.0.0.1:5555/js/libs/ember-data.js:3355:35)
at http://127.0.0.1:5555/js/libs/ember-data.js:3333:21
at http://127.0.0.1:5555/js/libs/ember-data.js:7117:30
at http://127.0.0.1:5555/js/libs/ember-1.5.0.js:3428:30
at Object.OrderedSet.forEach (http://127.0.0.1:5555/js/libs/ember-1.5.0.js:3271:24)
at Object.Map.forEach (http://127.0.0.1:5555/js/libs/ember-1.5.0.js:3426:22)
at Function.DS.Model.reopenClass.eachRelationship (http://127.0.0.1:5555/js/libs/ember-data.js:7116:50)
at normalizeRelationships (http://127.0.0.1:5555/js/libs/ember-data.js:3319:18) ember-1.5.0.js:3521
Transition #0: games: transition was aborted 

以下 json 由 /games 返回

{
  "games": [
    {
      "serverSeedHash": "5eb59053dcb5810322e367245f631a65589ddf7bbe950d2986a43a5f376312ef",
      "id": 2,
      "serverSeed": null,
      "table": [
        1
      ],
      "amountOfPlayers": 2,
      "prizePool": 39600
    }
  ],
  "tables": [
    {
      "id": 1,
      "minimumPlayers": 2,
      "maximumPlayers": 100,
      "cardPrice": 1000,
      "games": [
        2
      ]
    }
  ]
}

我完整的 Ember.js app.js 如下所示:

window.App = Ember.Application.create({
    LOG_TRANSITIONS: true,
    LOG_TRANSITIONS_INTERNAL: true
});

App.Router.map(function () {
    this.route('games', { path: '/' });
});

App.Game = DS.Model.extend({
    serverSeedHash: DS.attr(),
    serverSeed: DS.attr(),
    amountOfPlayers: DS.attr(),
    prizePool: DS.attr(),
    table: DS.belongsTo('table')
});

App.Table = DS.Model.extend({
    minimumPlayers: DS.attr(),
    maximumPlayers: DS.attr(),
    games: DS.hasMany('game')
});


App.GamesRoute = Ember.Route.extend({
    model: function () {
        return this.store.find('game');
    }
});

有人知道我为什么会出错吗?请注意,这是我第一次玩 Ember.JS。 在过去的几天里,我一直在打破我的习惯。

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    在您的 game 模型中,您将 table 定义为 belongsTo 关系,因此 Ember 期望它在您向其发送数组时是单数的。将您的对象更改为此,它应该可以工作:

    {
      "games": [
        {
          ...
          "table": 1,
          ...
        }
      ],
      "tables": [
        ...
      ]
    }
    

    【讨论】:

    • 不幸的是,这并没有解决问题。我忘了说,在我开始定义关系之前代码确实有效。所以在添加 App.Table 模型后它就坏了。
    • 好的。仔细观察,您在 Game 模型中将 table 定义为单一的 belongsTo 关系,但您向它发送了一组表。如果你只是发送它... table: 1, ...,会解决它吗?
    • 解决了它...说真的,我应该早点问别人,这么少的事情太沮丧了。
    • 是的,这就是编程……我相应地修改了答案。
    猜你喜欢
    • 2015-09-09
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    • 2022-08-16
    相关资源
    最近更新 更多