在Ember中访问单个嵌套记录的最佳方法是什么?
我们尝试操作的JSON响应将返回以下内容:(目标属性为 tradeIdentifier 属性)
trade:
tradeIdentifier:"83f3f561-62af-11e7-958b-028c04d7e8f9"
tradeName:"Plumber"
userEmail:"test@gmail.com"
project-user
模型的一部分看起来像:
email: attr('string'),
trade:attr(),
tradeId: attr(),
project-user
序列化器的外观部分类似于:
export default UndefinedOmitted.extend(EmbeddedRecordsMixin, {
primaryKey: 'userRoleId',
attrs: {
'email': { key: 'userEmail' },
'trade': { key: 'trade' },
'tradeId': { key: 'tradeIdentifier' },
},
});
此处的trade
属性是一个占位符,用于确保可访问数据。
我希望能够访问tradeIdentifier
,而不必在组件中执行以下操作:
const trade = get(formRole, 'trade');
if (trade) {
set(formProps, 'tradeId', trade.tradeIdentifier);
}
已经测试过创建trade-id
转换(通过tradeId: attr('trade-id')
引用),但是无济于事。
export default Transform.extend({
deserialize(val) {
const trade = val;
const tradeId = val.tradeIdentifier;
return tradeId;
},
serialize(val) {
return val;
},
});
谁能建议我要去哪里错了?
答案 0 :(得分:0)
对于我想要在此处实现的目标而言,转换似乎有点过大了,但是确实可以。设法通过修改以下内容使其工作:
在 serializers / project-user.js 中:
'tradeId': { key: 'trade' },
请注意,这引用了要转换的有效负载中的属性,而不是所针对的属性(这是我的错误)。
在 models / project-user.js 中:
tradeId: attr('trade-id'),
属性引用了转换。
在 transform / trade-id.js 中:
export default Transform.extend({
deserialize(val) {
let tradeId = val
if (tradeId) {
tradeId = val.tradeIdentifier;
}
return tradeId;
},
serialize(val) {
return val;
},
});
如果在转换之外还有一个更简单的解决方案,那么我仍然乐于接受建议。