如何使用字符串作为Ember Data的主键?

时间:2013-04-14 22:38:29

标签: ember.js ember-data

我有以下代码:

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

因此,每次从服务器加载区域时,它都会将它们添加到本地列表,因为它不会将它们识别为已存在。有什么方法可以解决这个问题,还是我必须尝试模拟一些代理键?

1 个答案:

答案 0 :(得分: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);
  }
});