我正在尝试 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 时处理此问题的最佳方法是什么?我尝试了各种技巧,并耗尽了我的连接来寻找示例。
我最接近的是一个令人讨厌的 hack,将 id 设置为 -1 到新对象/记录,然后在提交后尝试将其删除。可悲的是,对象/记录不会真正被删除,只是在我的列表中显示为空白。另外,从那时起我无法创建任何 id 为 -1 的对象/记录(因为已经存在)。似乎是一个死胡同。
提前致谢。
>'.'
解决方案:
我能够从以下令人惊奇的示例中找到问题的解决方案:
Ember.js CRUD 休息 https://github.com/ddewaele/emberjs-crud-rest
适用于 Ember 的 Node.js REST 服务器 https://github.com/ddewaele/location-rest-api
对于其他遇到 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 发送的示例,这是将这些技术链接在一起的很棒的教程。