在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;
},
});
有没有人能建议我哪里错了?
发布于 2018-07-25 05:22:31
对于我在这里试图实现的目标来说,转换似乎有点过头了,但它确实做到了这一点。通过修改以下内容,我成功地让它运行起来:
在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;
},
});
如果除了转换之外还有更简单的解决方案,我仍然会对建议持开放态度。
https://stackoverflow.com/questions/51490541
复制相似问题