【问题标题】:Ember.js belongsTo loading undefined modelsEmber.js 属于加载未定义的模型
【发布时间】:2014-04-04 19:04:59
【问题描述】:

我在 ember 中有一个模型,部分看起来像这样:

opt1votes: DS.hasMany('subscriber'),
opt2votes: DS.hasMany('subscriber'),
opt3votes: DS.hasMany('subscriber'),
opt4votes: DS.hasMany('subscriber'),
opt5votes: DS.hasMany('subscriber'),
keyword: DS.belongsTo('keyword'),
winAttachment: DS.belongsTo('asset'),
followAttachment: DS.belongsTo('asset'),
attachment: DS.belongsTo('asset'),

当此模型没有将 id 分配给 winAttachment、followAttachment 和附件属性时会出现问题(这些在系统中是可选的)。 ember 没有为这些属性加载任何内容,而是联系我们的 api 并获得以下响应:

{"asset":[]}

这导致创建了 3 个“资产”模型,所有属性为“未定义”:http://screencloud.net/v/nZDD

我的问题是为什么没有 id 的 ember 加载以及如何停止?我是否应该为空模型请求返回不同的内容,以便 ember 知道模型不完整?

感谢所有帮助!

编辑:来自对象的原始 JSON:

{
  "campaign": [
    {
      "id": 360,
      "name": "aa test",
      "message": "Thanks",
      "followMessage": "",
      "followTime": "",
      "opt1": "",
      "opt2": "",
      "opt3": "",
      "opt4": "",
      "opt5": "",
      "opt1votes": [],
      "opt2votes": [],
      "opt3votes": [],
      "opt4votes": [],
      "opt5votes": [],
      "singleEntry": false,
      "winnerNumber": "",
      "winningMessage": "",
      "winners": [],
      "tagIds": "",
      "campaignType": "Response",
      "starred": false,
      "draft": false,
      "completed": false,
      "archived": false,
      "optins": 0,
      "optouts": 0,
      "keyword": 352,
      "paused": false,
      "startDate": 1396475400,
      "startDateDisplay": "Apr 02, 2014 4:50PM",
      "percentComplete": 0,
      "created": "Wednesday, Apr 2 2014 4:49PM",
      "attachment": "",
      "followAttachment": "",
      "winAttachment": "",
      "entryQuota": 0,
      "createdSorting": 1396475366,
      "subLists": "",
      "subs": "",
      "endCampaign": false,
      "pageUrl": "http://l.gocella.com/T1d0NM5",
      "sentAllTime": 0,
      "sentThirtyDays": 0,
      "sentNinetyDays": 0,
      "votesAllTime": 0,
      "votesThirtyDays": 0,
      "votesNinetyDays": 0,
      "entriesAllTime": 0,
      "entriesThirtyDays": 0,
      "entriesNinetyDays": 0,
      "followsSentAllTime": 0,
      "followsSentThirtyDays": 0,
      "followsSentNinetyDays": 0
    }
  ]
}

这个对象在模型中就有了belongsTo关系

【问题讨论】:

  • 你能显示返回的原始 json 吗?
  • 你能把这个做成一个jsbin吗?我怀疑这可能是您未在此处显示的某些代码的问题?
  • @kingpin2k 是的,我已经把它放在问题中,因为它对 cme​​ts 来说太长了
  • 您将在 JSON 中看到 "attachment":"","followAttachment":"","winAttachment":""。我们没有发回 ID,但是 ember 正在尝试加载它们,导致“未定义”
  • 通过过滤掉任何没有 ID 的模型,我们能够让这些空模型停止加载到我们的下拉菜单中,但 ember 仍在尝试查找没有 ID 的模型。它不会对任何其他有关系但没有 ID 的属性执行此操作。

标签: ember.js ember-data


【解决方案1】:

在我看来,您将这些属性排除在 JSON 之外,导致它们的值在强制转换为字符串时为 'undefined',Ember-Data 认为这是一个有效的 ID。 Ember-Data 需要 JSON 中的这些属性,并且需要它们的有效值,无论您的系统是否认为它们是可选的。您应该在 JSON 中包含这三个属性,如果关系不存在,则将它们设置为 null

【讨论】:

  • 感谢@GJK,但我的问题是为什么当原始 JSON 上没有 ID 时,ember 会尝试加载这些 belongsTo 模型(已编辑为上面的问题)?我确实尝试为这些属性返回“null”,但它会请求寻找“null”的 ID
  • 如果您返回 null(不是作为字符串,而是作为值),并且 Ember-Data 仍在尝试获取对象,那么您发现了 Ember-Data 错误。
  • 是的,我是这么想的......我们正在返回一个空值或空值,而 ember 仍在尝试通过引用无 ID 来获取模型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多