【问题标题】:camelCased Model namescamelCased 型号名称
【发布时间】:2013-03-21 15:48:21
【问题描述】:

有谁知道最近是否有驼峰属性的问题。

我有一个这样的模型:

var attr = DS.attr;

App.Users = DS.Model.extend({
    firstName: attr('string'),
    phone: attr('string'),
    email: attr('string')
});

在我的模板中,电子邮件和电话正确显示,但名字没有出现。我检查了 json 文件,一切似乎都很好。我所有的其他模型都出现了同样的问题, 所以我想它必须与camelCase有关。

【问题讨论】:

  • 不应该是firstName: DS.attr('string'), ...吗?
  • 绝对可以。来自服务器的 json 响应包含 'first_name' 或 'firstName' ?
  • 我认为你必须这样做:DS.RESTAdapter.map('App.User', { firstName: 'firstName' });,我认为型号名称应该是单数。
  • 因为它们在您的模型和 JSON 响应中具有完全相同的名称。 Ember.js 依赖于命名conventions,它希望将多字驼峰式(例如firstName)模型属性映射到多字下划线分隔小写(例如first_name) JSON 响应的属性。
  • @MilkyWayJoe 是的,我明白了,我认为现在您的回答非常适合他的问题。感谢您抽出宝贵时间:)

标签: ember.js ember-data


【解决方案1】:

弃用通知:这个答案是从 2013 年开始的,直到现在还没有修改。这并不反映 JSON API 适配器,而是反映 Ember-Data 的 RESTAdapter。

Ember.js 依赖于naming conventions,它希望将多字驼峰式(例如firstName)模型属性映射到多字下划线分隔的小写属性(例如@ 987654324@) 在 JSON 响应中。如果您的 JSON 为您提供firstName,或者在您控制后端 API 的情况下任何不在此约定中的内容,您可以选择定义一个 map,它告诉您适配器在 JSON 响应中查找特定键并将其映射到给定模型中的属性。

你可以这样做:

DS.RESTAdapter.map('App.User', { 
    firstName: { key: 'firstName' },
    lastName: { key: 'familyName' }
});

请注意,在上面的示例中,我添加了一个 lastName 属性,它不属于您自己的模型。我这样做只是为了说明您可以同时映射多个属性,并且它在 JSON 响应中的名称可以是任何名称,不一定是不同大小写中的相同名称。

【讨论】:

  • @MilkyWayJoe 有更新的方法吗?我在加载页面时收到错误TypeError: DS.RESTAdapter.map is not a function
  • @NathanHanna 很遗憾没有。我已经调查过了,但我现在大约 6 个月没有更新框架了,所以我在这里真的帮不上忙 :(
  • 目前 JSON API 不再使用 underscore 而是 hyphen-minus 字符。查看更多信息:jsonapi.org/recommendations/#naming
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
相关资源
最近更新 更多