Comment faire pour récupérer toutes les propriétés d'un Ember.js modèle
Je suis travailler avec des formulaires Ember.js et je veux récupérer une liste de toutes les propriétés du modèle pour que je puisse prendre des instantanés de l'état de la forme à différents moments. Est-il possible d'obtenir une liste de toutes les propriétés d'un modèle?
Par exemple, si mon modèle est:
App.User = DS.Model.extend({
name: DS.attr('string'),
email: DS.attr('string'),
current_password: DS.attr('string'),
password: DS.attr('string'),
password_confirmation: DS.attr('string'),
admin: DS.attr('boolean'),
}
Ensuite, je voudrais avoir quelque chose comme ceci:
> getEmberProps('User')
["name", "email", "current_password", "password", "password_confirmation", "admin"]
JSON.stringify? Avez-vous essayé?
hmmm, je ne sais pas comment JSON.stringify qu'à une Braise modèle
hmmm, je ne sais pas comment JSON.stringify qu'à une Braise modèle
OriginalL'auteur joscas | 2013-03-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser la méthode toJSON méthode sur le modèle et obtenir les clés de l'objet.
Note qui ne sera pas de retour, vous avez les clés pour les relations.
Note that will not return you keys for relations
-> je ne sais pas qui de braise version que vous utilisez; je suis à l'aide de Braise 1.11.3 à l'heure actuelle, la version de relations remise des clés.OriginalL'auteur piotrze
Un moyen facile d'imprimer les champs et leurs valeurs:
OriginalL'auteur calcsam
Vous pouvez également utiliser cette:
http://emberjs.com/api/data/classes/DS.Model.html#property_attributes
http://emberjs.com/api/data/classes/DS.Model.html#method_eachAttribute
Il y a également des propriétés similaires pour les relations trop.
OriginalL'auteur Michael
Il n'est pas facile, mais vous pouvez essayer une coutume mixin comme ceci:
Vous pouvez l'utiliser comme ceci:
Si vous n'aimez pas dans le mixin, il devrait être facile à extraire le code dans une fonction séparée avec le modèle de l'argument. Mais je ne comprends pas, pourquoi vous n'aimez pas le mixin. C'est probablement le plus emberish façon de résoudre ce problème.
Eh bien, peut-être que je suis confus, mais si j'utilise le mixin de cette façon, ce que je reçois est les propriétés de l'instance de l'objet mais je ne peux pas le faire:
User = DS.Model.extend(Ember.AllKeysMixin,{ name: DS.attr('string'), email: DS.attr('string'), current_password: DS.attr('string'), password: DS.attr('string'), password_confirmation: DS.attr('string'), admin: DS.attr('boolean'),
et puismodel.getKeys()
quelque part d'autre pour obtenir 'nom', 'email', etc..Ah, je ne comprends pas votre question de cette façon. Si vous souhaitez obtenir les propriétés de la classe, et non pas ceux de l'instance. Quand j'ai lu modèle, je suis toujours en train de penser à propos de l'instance. Donc, mon approche ne fonctionnera pas. Peut-être que l'on pourrait migrer cette fonction relativement facile à la classe par l'ajout d'une classe via reopenClass()..
Peut-être le titre de ma question est trompeuse. Si quelqu'un peut penser à un meilleur titre, je serai heureux de le modifier.
OriginalL'auteur mavilein
2018: l'utilisation de Braise de Données de eachAttribute.
Donc, étant donné un modèle Foo:
Nous allons obtenir le modèle de la définition par le constructeur:
et appeler une fonction pour chacun de ses Braise attributs de Données:
OriginalL'auteur mistahenry