6

私は次のような人物モデルを持っています

 App.Person= DS.Model.extend({
      id: DS.attr('string'),   
      name: DS.attr('string'),
      visits: DS.hasMany('App.Visit'),
      events: DS.hasMany('App.Event') ,
      allergies: DS.hasMany('App.Allergies'),
      get_allergies : function(){
    return this.get('allergies').getEach('allergy_name').reduce(function(accum, item) {
      return (accum.length > 0) ? (accum +', '+ item) : (item);
    }, '');
  }.property('allergies.@each.allergy_name')    
    });


App.Visit = DS.Model.extend({
  visit_id: DS.attr('string'),
  date: DS.attr('date'),     
  admission: DS.belongsTo('App.Admission')
});

App.Admission = DS.Model.extend({
  loc: DS.attr('string'),
  admission_date: DS.attr('date'),
  care_team: DS.belongsTo('App.CareTeam')
});

ご覧のとおり、Person hasMany の「allergies」と person に加えて、allergies もロードされています。これは、UI で get_allergies メソッドを呼び出しているのに、「visits」や「events」などの他の hasMany 関係がロードされていないためです。

UI {{person.get_allergies}}

「訪問」と「イベント」の関係をサイドロードしようとしましたが (ネット上の例を使用)、うまくいきませんか? stackoverflow自体に関するいくつかの質問を除いて、ネット上の例を含む適切なドキュメントが見つからなかったため、誰かがember-dataをサイドロードする適切な方法を教えてもらえますか?

4

3 に答える 3

4

ドキュメントによると、サーバーからの応答に追加の訪問データとイベント データを追加するだけです。

{
  "person": {
    "id": 1,
    ...
    "event_ids": [5, 6, 7]
  },

  "events": [{
    "id": 5,
    ...
  },
  {
    "id": 6,
    ...
  },
  {
    "id": 7,
    ...
  }]
}

ここでの要点は、Events データは Person データの外にある必要があるということです。

標準の REST アダプターを使用していますか? サーバーから返されたサンプル json を追加していただけますか?

于 2013-03-07T21:41:24.167 に答える
4

アプリでデータをサイドロードするために、ember-data を構成して、サイドロードする対象の種類を認識します。たとえば、イベントと訪問をサイドロードするには、次のようにします。

DS.RESTAdapter.configure('App.Event', {
    sideloadsAs: 'events'
});

DS.RESTAdapter.configure('App.Visit', {
    sideloadsAs: 'visits'
});

App.Store = DS.Store.extend({
    revision: 11
});

json では次のようになります。

{
  "person": {
    "id": 1,
    "event_ids": [5, 6, 7],
    "visit_ids": [1, 2, 3]
  },

  "events": [
    { "id": 5 },
    { "id": 6 },
    { "id": 7 }
  ],

  "visits": [
    { "id": 1 },
    { "id": 2 },
    { "id": 3 }
  ]
}
于 2013-04-05T14:27:56.733 に答える
0

私は同じ問題を抱えていましたが、セットアップが少し異なりました。visits彼らのことを知らなかったperson(つまり、できなかっvisit.get('person.name')た)。次のシリアライザを追加する必要がありましたvisit

export default AppSerializer.extend({
  attrs: {
    person: 'personId'
  },
});

私のペイロードは次のようになります。

{
  person: {
    id: 1,
    name: 'John',
    visitIds: [1, 2, 3]
  },

  visits: [
    { id: 1,
      personId: 1
    },
    { id: 2,
      personId: 1
    },
    { id: 3,
      personId: 1
    }
  ]
}

personモデル:

export default DS.Model.extend({
  name: DS.attr('string'),
  visits: DS.hasMany('visit')
});

visitモデル:

export default DS.Model.extend({
  person: DS.belongsTo('person')
});
于 2015-06-03T21:26:58.950 に答える