Как лучше всего получить доступ к одной вложенной записи в Ember?
Ответ JSON, которым мы пытаемся управлять, возвращается в следующем виде: (целевой атрибут - это свойство tradeIdentifier)
trade:
tradeIdentifier:"83f3f561-62af-11e7-958b-028c04d7e8f9"
tradeName:"Plumber"
userEmail:"[email protected]"
Модель 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;
},
});
Может ли кто-нибудь подсказать, где я ошибаюсь?
@jelhan - да, попробовал attrs: { tradeId: { key: 'trade.tradeIdentifier' } }, похоже, не работает (было бы неплохо, если бы это было). Закончилось заставить преобразование работать; опубликую решение ниже.





Преобразование кажется излишним для того, чего я здесь пытаюсь достичь, однако оно выполняет свою работу. Удалось заставить его работать, изменив следующее:
В сериализаторы / проект-user.js:
'tradeId': { key: 'trade' },
Обратите внимание, что это ссылается на свойство в полезной нагрузке для преобразования, а не на целевое свойство (что было моей ошибкой).
В модели / проект-user.js:
tradeId: attr('trade-id'),
Атрибут ссылается на преобразование.
В преобразовать / trade-id.js:
export default Transform.extend({
deserialize(val) {
let tradeId = val
if (tradeId) {
tradeId = val.tradeIdentifier;
}
return tradeId;
},
serialize(val) {
return val;
},
});
Если есть более простое решение помимо преобразований, я все равно буду открыт для предложений.
Преобразование должно быть применено к вашему
trade, значение дляtradeIdпусто, потому что у вас нет свойства с именемtradeIdentifierв вашей полезной нагрузке. Вы пробовали использовать вложенный ключ наattrs? Какattrs: { tradeId: { key: 'trade.tradeIdentifier' } }. Сам никогда не пробовал, но может сработать.