首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ember.js -通过序列化程序访问嵌套数据

Ember.js -通过序列化程序访问嵌套数据
EN

Stack Overflow用户
提问于 2018-07-24 12:38:19
回答 1查看 62关注 0票数 0

在Ember中访问单个嵌套记录的最佳方法是什么?

我们试图操作的JSON响应返回如下:(目标属性是tradeIdentifier属性)

代码语言:javascript
复制
trade:
    tradeIdentifier:"83f3f561-62af-11e7-958b-028c04d7e8f9"
    tradeName:"Plumber"
userEmail:"test@gmail.com"

project-user模型部分类似于:

代码语言:javascript
复制
  email: attr('string'),
  trade:attr(),
  tradeId: attr(),

project-user序列化程序部分类似于:

代码语言:javascript
复制
export default UndefinedOmitted.extend(EmbeddedRecordsMixin, {
  primaryKey: 'userRoleId',
  attrs: {
    'email': { key: 'userEmail' },
    'trade': { key: 'trade' },
    'tradeId': { key: 'tradeIdentifier' },
  },
});

这里的trade属性是一个占位符,用于确保数据是可访问的。我希望能够访问tradeIdentifier,而不必在组件中执行以下操作:

代码语言:javascript
复制
const trade = get(formRole, 'trade');
if (trade) {
  set(formProps, 'tradeId', trade.tradeIdentifier);
}

我已经测试了创建trade-id转换(通过tradeId: attr('trade-id')引用),但是没有用。

代码语言:javascript
复制
export default Transform.extend({
  deserialize(val) {

    const trade = val;
    const tradeId = val.tradeIdentifier;

    return tradeId;
  },
  serialize(val) {
    return val;
  },
});

有没有人能建议我哪里错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
复制
export default Transform.extend({
  deserialize(val) {

    let tradeId = val
    if (tradeId) {
      tradeId = val.tradeIdentifier;
    }

    return tradeId;
  },
  serialize(val) {
    return val;
  },
});

如果除了转换之外还有更简单的解决方案,我仍然会对建议持开放态度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51490541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档