3

Ember.js、Node.js、MongoDB を試しています。Ember サイトの優れたビデオと、Node.js、Express、および MongoDB を使用して REST API を作成することに基づいて、私の考えをまとめました。レコード作成機能を機能させようとして、Ember.js 側で障害にぶつかりました。

現在、サンプル アプリケーションでユーザーがレコードを作成すると、リストに 2 つ表示されます。これは、レコードをサーバーに保存すると、MongoDB によってそのレコードの新しい ID が作成されるためです。(新しい ID を持つオブジェクトを含む) 応答が返されると、ページを更新するまでレコードが複製されます。1 つは新しい Mongo 提供の ID を持ち、もう 1 つは 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を使用する場合、これを処理する最良の方法は何ですか? 私はあらゆる種類のトリックを試し、例を探して接続を使い果たしました。

私が行った最も近いのは、新しいオブジェクト/レコードに-1のIDを設定し、コミット後にそれを削除しようとする厄介なハックです。残念ながら、オブジェクト/レコードは実際には削除されず、リストに空白で表示されるだけです。さらに、その時点から 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 サービス内で、DB 呼び出しは「id」を「_id」にマップします。

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

例を送ってくれた ddewaele に再び感謝します。これは、これらのテクノロジを相互にリンクするための優れたチュートリアルでした。

4

0 に答える 0