3

我正在试验 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 的对象/记录(因为已经存在一个)。似乎是个死胡同。

提前致谢。

>'.'<

解决方案:

我能够从以下令人惊叹的示例中收集到问题的解决方案:

Ember.js CRUD REST

用于 Ember 的 Node.js REST 服务器

对于遇到 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 提供的示例,这是将这些技术链接在一起的绝佳教程。

4

0 回答 0