我正在试验 Ember.js、Node.js 和 MongoDB。我基于 Ember 网站上的精彩视频和使用 Node.js、Express 和 MongoDB 创建 REST API 进行了思考。我在 Ember.js 方面遇到了障碍,试图让我的创建记录功能正常工作。
目前,当用户在我的示例应用程序中创建记录时,列表中将显示两个。发生这种情况是因为当我将记录保存到服务器时,MongoDB 会为该记录创建一个新 ID。当返回响应(包含具有新 ID 的对象)时,记录将被复制,直到我刷新页面。一个具有 Mongo 提供的新 ID,另一个具有 NULL。
这是我创建新对象的地方:
App.NewwineRoute = Ember.Route.extend({
model: function() {
return App.Wine.createRecord();
}
});
这是我将记录存储到 MongoDB 的位置:
App.NewwineController = Ember.ObjectController.extend({
doneEditing: function() {
this.get('store').commit();
this.transitionToRoute('wines');
}
});
我很好奇使用 ember-data 时最好的处理方法是什么?我尝试了各种技巧,并在寻找示例时耗尽了我的联系。
我最接近的一次是将 id 设置为 -1 到新对象/记录,然后在提交后尝试将其删除。可悲的是,对象/记录不会真正被删除,只是在我的列表中显示为空白。另外,从那时起,我无法创建任何 id 为 -1 的对象/记录(因为已经存在一个)。似乎是个死胡同。
提前致谢。
>'.'<
解决方案:
我能够从以下令人惊叹的示例中收集到问题的解决方案:
对于遇到 ID 问题的其他人,上例中的 App.Adapter 处理从“_id”到“id”的映射。
App.Adapter = DS.RESTAdapter.extend({
serializer: DS.RESTSerializer.extend({
primaryKey: function (type){
return '_id';
}
})
});
在示例的 Node.js 服务中,数据库调用映射“id”到“_id”:
collection.findOne({'_id':new BSON.ObjectID(id)}, function(err, item) {
再次感谢 ddewaele 提供的示例,这是将这些技术链接在一起的绝佳教程。