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 のオブジェクト/レコードを作成できませんでした (既に存在するため)。行き止まりのようです。
前もって感謝します。
>'.'<
解決:
次の素晴らしい例から、問題の解決策を見つけることができました。
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 に再び感謝します。これは、これらのテクノロジを相互にリンクするための優れたチュートリアルでした。