我有一个带有JSON键'custom-device-label-1'的模型属性,我希望找到它作为'customDeviceLabel1',但它不存在,即使有效载荷有数据,模型属性也是未定义的。
答案 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”它刚刚起作用。