Hinzufügen neuer Ember.js-Objekte / -Datensätze, wenn DB ID bereitstellt

Ich experimentiere mit Ember.js, Node.js und MongoDB. Ich habe mein Nudeln auf dem hervorragenden Video auf der Ember-Site und dem Erstellen einer REST-API mit Node.js, Express und MongoDB basiert. Ich habe auf der Seite von Ember.js eine Straßensperre getroffen, um meine Funktion zum Erstellen von Datensätzen zum Laufen zu bringen.

Wenn ein Benutzer derzeit einen Datensatz in meiner Beispielanwendung erstellt, werden zwei in der Liste angezeigt. Dies geschieht, weil MongoDB eine neue ID für diesen Datensatz erstellt, wenn ich meinen Datensatz auf dem Server speichere. Wenn die Antwort zurückgegeben wird (die das Objekt mit der neuen ID enthält), wird der Datensatz dupliziert, bis ich die Seite aktualisiere. Einer hat die neue von Mongo bereitgestellte ID und der andere hat eine NULL.

Hier erstelle ich das neue Objekt:

App.NewwineRoute = Ember.Route.extend({
   model: function() {
          return App.Wine.createRecord();
   }
});

Hier speichere ich den Datensatz in MongoDB:

App.NewwineController = Ember.ObjectController.extend({
    doneEditing: function() {
        this.get('store').commit();
        this.transitionToRoute('wines');
    }
});

Ich bin neugierig, wie ich das am besten mit Ember-Daten umgehen kann. Ich habe alle möglichen Tricks ausprobiert und meine Verbindung aufgebraucht, um nach Beispielen zu suchen.

Am ehesten ist es mir gelungen, eine ID von -1 für das neue Objekt / den neuen Datensatz festzulegen und dann zu versuchen, ihn nach dem Festschreiben zu entfernen. Leider würde das Objekt / der Datensatz nicht wirklich entfernt, sondern nur leer in meiner Liste angezeigt. Außerdem konnte ich ab diesem Zeitpunkt keine Objekte / Datensätze mit der ID -1 erstellen (da bereits eines vorhanden ist). Scheint wie eine Sackgasse.

Danke im Voraus.

> '.' <

LÖSUNG:

Ich konnte die Lösung des Problems anhand der folgenden ERSTAUNLICHEN Beispiele ermitteln:

Ember.js CRUD REST

Node.js REST-Server für Ember

Für andere, bei denen das ID-Problem aufgetreten ist, übernimmt der App.Adapter im obigen Beispiel die Zuordnung von "_id" zu "id".

App.Adapter = DS.RESTAdapter.extend({
  serializer: DS.RESTSerializer.extend({
    primaryKey: function (type){
      return '_id';
    }
  })
});

Innerhalb des Node.js-Dienstes des Beispiels ruft die DB map "id" zu "_id" auf:

collection.findOne({'_id':new BSON.ObjectID(id)}, function(err, item) {

Nochmals vielen Dank an ddewaele für die Zusendung des Beispiels. Es war ein großartiges Tutorial, um diese Technologien miteinander zu verknüpfen.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage