3

次のコードがあります。

Pult.Zone = DS.Model.extend({
  name: DS.attr('string'),
  authoritative: DS.attr('boolean'),
  user_id: DS.attr('number'),
  rulesets: DS.hasMany('Pult.Ruleset')
});

Pult.RESTAdapter.map('Pult.Zone', {
  primaryKey: 'name',
  rulesets: { key: 'rulesetIds' }
});

ただし、主キーを正しく取得しているようには見えません。すべてのゾーンのリストをレンダリングしました。

テストケースは次のとおりです。

zones = Pult.store.findAll(Pult.Zone);
zones.get('length'); // Returns 10
zones = Pult.store.findAll(Pult.Zone);
zones.get('length'); // Returns 20

そのため、サーバーからゾーンをロードするたびに、ゾーンが既に存在していると認識されないため、ゾーンがローカル リストに追加されます。これを修正する方法はありますか、またはいくつかの代理キーをモックアップする必要がありますか?

4

1 に答える 1

6

Ember Data 1.0.0 Beta 2にアップグレードした後、機能するソリューションを見つけました。

App.Zone = DS.Model.extend({
  name: DS.attr('string'),
  user_id: DS.attr('number'),
});

App.ZoneSerializer = DS.RESTSerializer.extend({
  normalize: function(type, hash, property) {
    // Ember Data use the zone name as the ID.
    hash.id = hash.name;

    // Delegate to any type-specific normalizations.
    return this._super(type, hash, property);
  }
});
于 2013-09-07T22:11:34.837 に答える