Ember.js - 通过序列化程序访问嵌套数据
Ember.js - Accessing nested data via serializer
在 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;
},
});
谁能指出我哪里出错了?
转换对于我在这里想要实现的目标来说似乎有点矫枉过正,但它完成了工作。通过修改以下内容设法让它工作:
在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;
},
});
如果在转换之外有更简单的解决方案,我仍然愿意接受建议。
在 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;
},
});
谁能指出我哪里出错了?
转换对于我在这里想要实现的目标来说似乎有点矫枉过正,但它完成了工作。通过修改以下内容设法让它工作:
在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;
},
});
如果在转换之外有更简单的解决方案,我仍然愿意接受建议。