gpt4 book ai didi

javascript - Ember.js 主键 : '_id' ?

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:28 25 4
gpt4 key购买 nike

很明显,我可能在这个问题上失去了理智。当然,这对我尝试几乎同时学习所有这些技术没有帮助。我使用 Node.js/Express/Mongoose/MongoDB 构建了一个 API,并且它有效。我正在尝试在 Ember.js 应用程序中使用此 REST 端点。 Ember 应用程序与固定装置配合使用,因此客户端正在工作。

问题是 REST 端点将对象 ID 发出为 _id,而 Ember 期望并需要 id。是的,我已经searched and located a related question并尝试过解决方案:

WbsEmber.ApplicationAdapter = DS.RESTAdapter.extend({
serializer: DS.RESTSerializer.extend({
primaryKey: function(type){
return '_id';
}
}),
host: 'http://localhost:8080',
namespace: 'api'
});

阅读Ember.DS api documentation for the RESTAdapter ,看来这应该可行:

WbsEmber.ApplicationSerializer = DS.RESTSerializer.extend({
primaryKey: '_id'
});

WbsEmber.ApplicationAdapter = DS.RESTAdapter.extend({
host: 'http://localhost:8080',
namespace: 'api'
});

但是,两者都不断在控制台中抛出此错误堆栈。

Error while loading route: Error: No model was found for '0'
at new Error (native)
at Error.Ember.Error (http://localhost:9000/bower_components/ember/ember.js:910:19)
at Ember.Object.extend.modelFor (http://localhost:9000/bower_components/ember-data/ember-data.js:9805:33)
at JSONSerializer.extend.extractArray (http://localhost:9000/bower_components/ember-data/ember-data.js:3172:28)
at superWrapper (http://localhost:9000/bower_components/ember/ember.js:1292:16)
at Ember.Object.extend.extractFindAll (http://localhost:9000/bower_components/ember-data/ember-data.js:2380:21)
at Ember.Object.extend.extract (http://localhost:9000/bower_components/ember-data/ember-data.js:2365:37)
at http://localhost:9000/bower_components/ember-data/ember-data.js:10396:34
at invokeCallback (http://localhost:9000/bower_components/ember/ember.js:10013:19)
at publish (http://localhost:9000/bower_components/ember/ember.js:9683:9)

仅供比较,我的装置如下所示:

WbsEmber.Code.FIXTURES = [
{ id: 0, wbs: 'C04220', name: 'AGSS', type: 'prefix' },
{ id: 1, wbs: 'E5180', name: "ILO", type: 'suffix' },
{ id: 2, wbs: 'C04210', name: 'ARC1', type: 'prefix' },
{ id: 3, wbs: 'E0040', name: ' course preparation', type: 'suffix' },
{ id: 4, wbs: 'C04232', name: 'ARC2', type: 'prefix' },
{ id: 5, wbs: 'E0041', name: 'learn new course', type: 'suffix' },
{ id: 6, wbs: '4710', name: 'instructor labor', type: 'single' },
{ id: 7, wbs: 'ES1028', name: 'tech lead labor', type: 'single' }
];

来自 REST 端点的 JSON 响应如下所示:

[
{"_id": "53ac3f0d4e29d793d9f53384", "type": "prefix", "name": "UAGI", "wbs": "C04424", "__v": 0},
{"_id": "53ac3f114e29d793d9f53385", "type": "prefix", "name": "AGSS", "wbs": "C04220", "__v": 0},
{"_id": "53ac3f154e29d793d9f53386", "type": "prefix", "name": "ARC1", "wbs": "C04210", "__v": 0},
{"_id": "53ac3f184e29d793d9f53387", "type": "prefix", "name": "ARC2", "wbs": "C04232", "__v": 0}
]

响应是直接从 Chrome 中的开发者工具复制并粘贴的,因此请求已成功发出,并且响应正在发送至客户端。

仅供引用,这里还有所有软件包和各自的版本。

"dependencies": {
"ember": "1.5.0",
"handlebars": "1.2.1",
"ember-data": "1.0.0-beta.7",
"bootstrap-sass-official": "3.1.1",
"ember-addons.bs_for_ember": "~0.7.0"
}

我似乎一生都无法弄清楚如何让它发挥作用。欢迎任何可能解决此问题的建议、见解或引用来源。感谢您的帮助。

最佳答案

这是正确的模式:

WbsEmber.ApplicationSerializer = DS.RESTSerializer.extend({
primaryKey: '_id'
});

WbsEmber.ApplicationAdapter = DS.RESTAdapter.extend({
host: 'http://localhost:8080',
namespace: 'api'
});

您的 json 响应应该(或被序列化)为以下格式:

{
codes: [
{"_id": "53ac3f0d4e29d793d9f53384", "type": "prefix", "name": "UAGI", "wbs": "C04424", "__v": 0},
{"_id": "53ac3f114e29d793d9f53385", "type": "prefix", "name": "AGSS", "wbs": "C04220", "__v": 0},
{"_id": "53ac3f154e29d793d9f53386", "type": "prefix", "name": "ARC1", "wbs": "C04210", "__v": 0},
{"_id": "53ac3f184e29d793d9f53387", "type": "prefix", "name": "ARC2", "wbs": "C04232", "__v": 0}
]
}

过渡文档对于仍在处理中的文档中的一些细微差别确实很有帮助:https://github.com/emberjs/data/blob/master/TRANSITION.md

关于javascript - Ember.js 主键 : '_id' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24436625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com