2013-04-14 36 views
3

我有以下代碼:如何使用字符串作爲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 

所以每次我打開區從服務器,這將它們添加到本地列表,因爲它不承認他們是已經存在的。任何方式來解決這個問題,或者我將不得不嘗試模擬一些代理鍵?

回答

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); 
    } 
}); 
相關問題