如何解决Ember Data 未正确序列化数组中对象的属性名称
我有一个简单的(针对这个问题)模型,它有一个名为electricGuitar 的属性,它有一些预定义的默认值。
export default class guitarCollectionModel extends Model {
@attr('string') firstName;
@attr('string') lastName;
@attr({
defaultValue() {
return [
{
serialNumber: "sdfdsfadf",colorCode: "dsfsadfdfa"
},{
serialNumber: "234234234",colorCode: "234234234323"
},{
serialNumber: "oorprpprprpororprp",colorCode: "rproproroprporp"
}
];
}
}) electricGuitars;
}
当我将模型 (this.model.save()
) 保存到我的 API 时,Ember 数据 POST 并且几乎默认情况下所有内容都正确序列化(没有自定义序列化程序或适配器)。 API 期望所有属性名称都被破折号。
{
"data": {
"attributes": {
"first-name": null,"last-name": null,"electric-guitars": [
{
"serialNumber": "sdfdsfadf","colorCode": "dsfsadfdfa"
},{
"serialNumber": "234234234","colorCode": "234234234323"
},{
"serialNumber": "oorprpprprpororprp","colorCode": "rproproroprporp"
}
]
},"type": "guitar-collection"
}
}
问题在于 serialNumber
属性/数组中的 colorCode
和 electricGuitars
属性没有被破格化。
有没有简单的方法来实现这一目标?
解决方法
虽然 JSON:API supports 任何有效的 JSON 作为属性值,但 Ember Data 序列化器不适用于嵌套的复杂对象。您可能会发现 Ember Data Model Fragments 对此有用,或者 embedded records。
,一种选择是编写自定义 transform。在 struct Node
{
int data;
bool redflag; // true면 red,false면 black
Node* left,* right,* parent;
Node(int data)
{
this->data = data;
left = right = parent = NULL;
this->redflag = true;
}
};
//
class RedBlackTree
{
private:
Node* root;
protected:
void left_rotate(Node*& root,Node*& node);
void right_rotate(Node*& root,Node*& node);
void insert_fixup(Node*& root,Node*& node);
public:
RedBlackTree() { root = NULL; }
~RedBlackTree() { root = NULL; }
void insert_node(const int& n);
void inorder();
};
Node* BSTInsert(Node* root,Node* node)
{
if (root == NULL)
return node;
if (node->data < root->data)
{
root->left = BSTInsert(root->left,node);
root->left->parent = root;
}
else if (node->data > root->data)
{
root->right = BSTInsert(root->right,node);
root->right->parent = root;
}
return root;
}
void RedBlackTree::insert_node(const int& _data)
{
Node* node = new Node(_data);
root = BSTInsert(root,node);
insert_fixup(root,node);
inorder();
}
函数中,您可以使用 dasherize:
serialize
然后指定自定义转换:
serialize(deserialized) {
return Object.fromEntries(Object.entries(deserialized)
.map(([key,val]) => [dasherize(key),val])
)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。