我的Ember.js應用程序出現問題。它使用JSONAPI{Adapter,Serializer}
及以下型號:Ember.js findRecord()使用ID爲null調用替代主鍵的模型
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調用adapter:findRecord()
與id = null
,導致錯誤的查詢。不知何故,模型數據似乎不正確。
當我刪除JSONAPISerializer中的主鍵定義並將id
字段中的節點的name
字段複製爲Ember默認主鍵時,一切正常。我的主鍵定義缺少什麼? Ember指南僅說明關於串行器中的primaryKey
的信息(https://guides.emberjs.com/v2.7.0/models/customizing-serializers/#toc_ids)。
非常感謝提前!
你有沒有找到一個很好的解決方案呢?我碰到類似的東西 –