2014-05-19 2 views
0

J'ai essayé depuis un certain temps de changer la clé primaire de mon modèle pour l'utilisation du magasin de données de braises. J'ai des appareils appelés 'Addon' qui n'ont pas de champ 'id' mais ils ont un champ 'artifactId'. J'ai trouvé plusieurs suggestions pour résoudre ce problème, mais aucune n'a jusqu'à présent fonctionné et il semble que beaucoup d'entre elles soient dépassées. Ce qui semble être la dernière façon de le faire est la suivante:Ember: modification de la clé primaire du modèle avec FixtureAdapter

App.Adapter.map('App.Addon', { 
    primaryKey: 'artifactId' 
}); 

Ce me donne « Uncaught TypeError: Impossible de lire la propriété « carte » undefined ». Dois-je initialiser la carte d'une manière ou d'une autre? La plupart des exemples que j'ai trouvés avec ceci utilise RESTAdapter - cela fonctionne-t-il seulement là?

Mon app.js dans son ensemble ressemble à ceci:

window.App = Ember.Application.create(); 
App.ApplicationAdapter = DS.FixtureAdapter.extend(); 
App.Adapter.map('App.Addon', { 
    primaryKey: 'artifactId' 
}); 

Répondre

1

Je pense, vous ne pouvez pas changer le primaryKey d'un modèle avec les paramètres par défaut actuels du FixtureAdapter. L'objectif de FixtureAdapter est de ne pas fournir un objet JSON similaire à l'API de votre serveur. Par défaut, les appareils doivent être normalisés car dans votre application ou dans vos vues, vous accéderez aux instances de DS.Model. dont primaryKey est toujours id.

{{#with model}} 
     model({{id}}): {{name}} 
{{/with}} 

Votre serveur pourrait fournir des biens selon primaryKey, de sorte que lorsque vous utilisez votre propre adaptateur vous devez configurer le modèle sérialiseur afin qu'il puisse sérialiser l'primaryKey à la propriété modèle id.

container.register('serializer:user', DS.RESTSerializer.extend({ 
    primaryKey: 'artifactId' 
})); 

Ci-dessous un exemple qui peut utiliser le RESTAdapter ou FixtureAdapter:

http://emberjs.jsbin.com/batih/1/edit

+0

Je sens que je fais juste mal. Comme c'est juste une chaîne json que je reçois d'une certaine url (seulement 'read' de CRUD), il semble que la meilleure façon de procéder est de l'interroger dans l'initalisation du modèle de la route au lieu de l'écrire dans le magasin et de charger sort de là encore. –

Questions connexes