2013-04-14 1 views
3

J'ai le code suivant:Comment utiliser une chaîne comme clé primaire avec 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' } 
}); 

Cependant, il ne semble pas se ramasser sur la clé primaire correctement. J'ai rendu une liste de toutes les zones.

est ici un test:

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

Ainsi, chaque fois que je charge les zones du serveur, il les ajoute à la liste locale, car il ne les reconnaît pas comme existant déjà. Tout moyen de résoudre ce problème, ou dois-je essayer de simuler des clés de substitution?

Répondre

6

Après la mise à niveau Ember Data 1.0.0 Beta 2, j'ai trouvé une solution qui fonctionne:

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); 
    } 
}); 
Questions connexes