8

この質問が話題になっているのを見てきましたが、Mongoをに操作する際にまだ問題があり_idますid。私はORMとしてマングースを使用していますが、仮想化されているものの、正しく機能させることができないようです。以下は私のマングースモデルにあるものです。

バックエンドから修正を試みます

mongoose = require 'mongoose'
Schema = mongoose.Schema
ObjectId = Schema.ObjectId

ApartmentSchema = new Schema
  body: String
  date: { type: Date, default: Date.now }
  deleted: {type: Boolean, default: false}
  saved: {type: Boolean, default: false}
  visited: {type: Boolean, default: false}
  email: String
  phoneNumber: String
  href: String

ApartmentSchema.virtual('id').get -> return @_id

module.exports = mongoose.model 'Apartment', ApartmentSchema

このモデルの新しいインスタンスをエクスプレスで作成すると、次のようにルックアップしapt.idてIDを取得できますが、応答をクライアントに送信すると、があり_idますid

私が試した2番目の解決策は、計算されたプロパティを作成することでしたidが、何らかの理由でemberはこれを好みません。ここには2つの問題があります。Emberは、呼び出されたid、または少なくとももう使用されていない計算プロパティを尊重しません。これは私の残り火データモデルがどのように見えるかです。

フロントエンドから修正してみてください

App.Apartment = DS.Model.extend({
  body: DS.attr('string'),
  date: DS.attr('date'),
  deleted: DS.attr('boolean'),
  saved: DS.attr('boolean'),
  visited: DS.attr('boolean'),
  email: DS.attr('string'),
  phone: DS.attr('string'),
  _id: DS.attr('string'),
  id : function () {
    return this.get('_id')
  }.property('_id')
});

以下の私のテンプレートでは、IDに対して何もレンダリングされません。

{{#each apartment in controller}}
    <li>{{apartment.body}} | {{apartment.date}} | {{apartment.href}} {{apartment.id}}</a>  {{#linkTo 'apartment' apartment }} View {{/linkTo}} </li>
{{/each}}

ヘルパーはlinkTo機能しますが、IDがあるべき場所にURLがnullになっています。これにより、戻るボタンが壊れ、データが複数回読み込まれます。以下は、いくつかのコンテキストでの私のルーターです。

App.Router.map(function(){
  this.resource('apartments', function (){
    this.resource('apartment', { path: ':apartment_id' } );
  });
});

計算さidれたプロパティの名前を次のようなものfooに変更してから、ルーターを次のように変更するとpath: ':apartment_foo'、URLにオブジェクト参照を持つURLが生成されます#/apartments/<App.Apartment:ember357:null>

こういうもので、残り火について私を悩ませます。どんな助けでもいただければ幸いです。

4

5 に答える 5

9

Ember 1.0.0-rc1およびEmberDataリビジョン11の時点では、これがこれを解決するための最良の方法のようです。

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

App.Store = DS.Store.extend({
  revision: 11,
  adapter: 'App.Adapter'
});
于 2013-03-12T18:09:55.117 に答える
7

Ember Data-バージョン:v1.0.0-beta.2の時点で、次のことができました。

App.ApplicationSerializer = DS.RESTSerializer.extend({
  primaryKey: "_id"
});

私はEmberにかなり慣れていないので、これは最善の方法ではないかもしれませんが、うまくいきました!

于 2013-09-25T17:10:04.483 に答える
5

私はクリスと同じ問題を抱えていました。IDは次のようになっています。

"_id":{"$oid":"52772aa44f6c6c5dd0000000"}

$oid部分をclaptimesのソリューションに追加することは私にとってはうまくいきました。

App.ApplicationSerializer = DS.RESTSerializer.extend({
  primaryKey: "_id.$oid"
});
于 2013-11-06T03:58:53.460 に答える
2

Ember-CLIへの移行以降、このプロセスは少し変更されました。あなたは今これをしたいです:

  1. Ember-CLIプロジェクトのコマンドラインから:

    ember g serializer application
    
  2. 新しく作成したシリアライザーを次のようにします。

    import DS from 'ember-data';
    
    export default DS.RESTSerializer.extend({
      primaryKey: '_id'
    });
    
于 2015-04-07T02:50:29.717 に答える
0

Ember 2.0.0以降、Mongo IDを正規化する適切な方法は、シリアライザーでを使用することextractIdです。Rails /GrapeAPIに対して実行されるRESTSerializerの例を次に示します。

import DS from 'ember-data';

export default DS.RESTSerializer.extend({
  isNewSerializerAPI: true,
  extractId: function (modelClass, resourceHash) {
    return resourceHash.id.$oid;
  }
});

isNewSerializerAPIこれを機能させるには、に設定する必要があることに注意してくださいtrue

あなたの必要性のために、あなたはあなたのためにresourceHash._id.$idまたは他にうまくいくものに変更することを試みることができます。よくわからない場合はconsole.log(resourceHash)、データを調べてみてください。

于 2015-08-22T23:05:02.457 に答える