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

如果在转换之外有更简单的解决方案,我仍然愿意接受建议。