[英]Ember.js findRecord() called with id null for model with alternative primary key
我的Ember.js应用程序有问题。 它使用JSONAPI{Adapter,Serializer}
和以下模型:
models/node.js
App.Node = DS.Model.extend(
{
// (node 'name' field used as primary key for serialization)
info: DS.attr('string'),
children: DS.hasMany('node', { inverse: null })
}
代表命名节点的树。
JSONAPIAdapter( adapters/application.js
)实现了queryRecord()
, query()
, findRecord()
和findAll()
函数,以转换来自服务器的Ember.js查询。 这一切都很好。
JSONAPISerializer实现函数normalizeResponse()
以将服务器响应JSON数据转换为json:api格式。 在序列化器中,主键定义为节点的“名称”字段:
serializers/application.js
App.ApplicationSerializer = DS.JSONAPISerializer.extend(
{
primaryKey: 'name',
normalizeResponse(store, primaryModelClass, payload, id, requestType)
{
// ...
}
});
序列化器生成的json:api数据示例为:
{
"data": [
{
"type": "node",
"attributes": {
"info": "Root node"
},
"relationships": {
"children": {
"data": [
{
"type": "node",
"name": "Root/SubNode1"
}
]
}
},
"name": "Root"
}
],
"included": [
{
"type": "node",
"attributes": {
"info": "Subnode 1"
},
"relationships": {
"children": {
"data": [
]
}
},
"name": "Root/SubNode1"
}
]
}
我使用Ember.js版本2.7.0和Ember检查器。
一旦应用程序运行,并且数据已加载到模型中,我就可以在模型中看到Ember检查器中的数据。 但是,在“数据”视图中调查模型数据(并选择一个项目)时,我发现Ember正在调用id = null
adapter:findRecord()
,从而导致了错误的查询。 似乎模型数据不正确。
当我在JSONAPISerializer中删除主键定义并在id
字段中将节点的name
字段复制为Ember默认主键时,一切都很好。 我的主键定义缺少什么? Ember指南仅说明有关序列化器( https://guides.emberjs.com/v2.7.0/models/customizing-serializers/#toc_ids )中primaryKey
信息。
提前谢谢了!
您需要定义name
字段以保存ID。
App.Node = DS.Model.extend(
{
// (node 'name' field used as primary key for serialization)
name: DS.attr('string'),
info: DS.attr('string'),
children: DS.hasMany('node', { inverse: null })
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.