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

时间:2018-07-24 04:38:19

标签: serialization ember.js ember-data

在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;
  },
});

谁能建议我要去哪里错了?

1 个答案:

答案 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;
  },
});

如果在转换之外还有一个更简单的解决方案,那么我仍然乐于接受建议。