Ember数据丢弃不规则属性

时间:2018-02-14 13:47:39

标签: ember.js

我有一个带有JSON键'custom-device-label-1'的模型属性,我希望找到它作为'customDeviceLabel1',但它不存在,即使有效载荷有数据,模型属性也是未定义的。

3 个答案:

答案 0 :(得分:0)

您有两种可能性:在服务器有效负载序列化中删除标签 1 之间的短划线...

custom-device-label1 //not custom-device-label-1

...或自定义序列化程序:

如果您无法操纵服务器的有效负载,则可以自定义模型的序列化程序: customize serializers

在您的情况下,我建议遵循序列化程序自定义:

// app/serializers/your-model.js (ember g serializer your-model)
import DS from 'ember-data';

export default DS.JSONAPISerializer.extend({

  keyForAttribute: function(attr) {
    if(attr === 'customDeviceLabel1') {
      return 'custom-device-label-1';
    }
    else {
      return this._super(...arguments);
    }
  }

});

答案 1 :(得分:0)

稍微扩大了wuarmin提供的答案。

默认情况下,Ember将获取模型中的属性名称并将其划线 这意味着去除属性名称并用短划线替换任何空格或下划线。

de-camelize中的字符边界预先接受小写部分中的数值。

str.replace(/([a-z\d])([A-Z])/g, '$1_$2').toLowerCase())

如果您需要覆盖这些规则,请在序列化程序中扩展keyForAttribute方法。或者,更改json响应中的键。

答案 2 :(得分:0)

谢谢你们,他们被卷入了工作岗位,当需要完成工作时,有时你只需要把磨刀石放到磨刀石上并找到自己的答案。在这种情况下,这是一个带有attrs阻塞的序列化器。

import DS from 'ember-data';
import Ember from 'ember';

export default DS.JSONAPISerializer.extend({
attrs: {
    customDeviceLabel1: 'custom-device-label-1',
    customDeviceLabel2: 'custom-device-label-2',
    customDeviceLabel3: 'custom-device-label-3',
    customDeviceLabel4: 'custom-device-label-4',
    customDeviceLabel5: 'custom-device-label-5',
    customDeviceLabel6: 'custom-device-label-6'
  }
});

如果我选择了正确的骆驼案例,例如“customDeviceLabel_1”它刚刚起作用。