Est-ce que quelqu'un connaît-il un moyen de spécifier pour un modèle code> code> un attribut qui n'est pas persisté? p>
Fondamentalement, nous chargons des métadonnées liées à chaque modèle et envoient ces données à Ember via le J'ai aussi le problème que cette métadonnée, qui n'est pas des données de l'enregistrement de base de données code> code>, est passée par le Ainsi, à la question originale: Y a-t-il une alternative au restadapter code> dans le modèle. Ces métadonnées peuvent être modifiées dans notre application, mais se fait via à l'aide d'un appel Ajax. Une fois que l'appel réussit, je souhaite pouvoir mettre à jour cette valeur dans le modèle sans embouts qui collent son nez dans cette entreprise en modifiant le modèle au
non engagé code> et faisant ce qu'il fait avec
transactions < / code> dans les coulisses. P>
Restadapter code> retour sur le serveur, ce qui ne fait pas 't attend ces valeurs. J'utilise un backend Ror, donc les erreurs de serveur en essayant d'attribuer des attributs protégés de masse qui ne sont pas censés être des attributs du tout. Je sais que je peux frotter les données reçues sur le serveur, mais je préférerais que le client puisse distinguer les données persistantes et les données auxiliaires. P>
ds.attr ("..." de l'EMBER-DATA ("...") code> qui spécifiera un attribut non persistant? P>
4 Réponses :
Quand ce PR Obtenez la fusion, il sera possible de signaler des propriétés comme Définissez votre modèle en ajoutant la nouvelle option puis sur l'adaptateur: p> Readonly code>. Mais jusqu'à ce qu'il y ait des solutions de contournement à cela, par exemple Remplacement de votre méthode code> Addattributes CODE> dans l'adaptateur et faites-la affaire avec vos propriétés spéciales, voici un exemple de la façon dont cela pourrait ressembler à:
Readonly code>: p>
App.Serializer = DS.RESTSerializer.extend({
addAttributes: function(data, record) {
record.eachAttribute(function(name, attribute) {
if (!attribute.options.readOnly) {
this._addAttribute(data, record, name, attribute.type);
}
}, this);
}
});
Beau, j'aurais dû être capable de trouver cela via Google, mon mauvais. J'ai passé tellement de temps à regarder! Il semble que cela entraînera toujours la saleté du modèle, alors je vais devoir travailler autour de cela encore, mais cela résout la partie la plus difficile du problème. Merci!
Merci. Cela devrait aller dans leur source. Bien que transitoire code> sonne comme un meilleur ajustement que
lisonly code>
Ember-Data version 1.0 Beta a tué ceci. Toute solution alternative?
Cette réponse est probablement obsolète avec les versions actuelles des données Ember. Je n'utiliserais rien dans ma réponse. P>
Je réponds à cette question pour référence, et parce que votre commentaire a indiqué que l'enregistrement reste Remplacer le alors vous pouvez utiliser Cette configuration fonctionne pour moi. p> h3> isdirty code>, mais voici ici Ma solution pour
Advatrebutes code> Méthode dans votre sérialisateur empêche
Lisonly code> d'être envoyé sur le serveur, ce qui est probablement exactement ce que vous voulez, mais vous devez étendre (ou
rouvrer code>) votre Adaptateur pour remplacer le
DirtyRecordsforattributechange Code> Pour éviter que l'enregistrement de devenir sale: p>
les attributs code> : p>
Les autres réponses à cette question fonctionnent avec des versions de données Ember jusqu'à 0,13 et ne fonctionnent plus.
Pour Ember Data 1.0 Beta 3 Strong> Vous pouvez faire: App.User = DS.Model.extend({
name: DS.attr('string', {transient: true})
});
Est-ce toujours le cas? C'est une excellente solution, mais la réponse est assez ancienne, le framework a-t-il absorbé maintenant?
Cette version est la dernière que j'ai utilisée, mais théoriquement, cela devrait fonctionner, car l'équipe a déclaré qu'ils gelaient des changements d'API après 1.0
Suivre cette Répondre , pour empêcher un champ d'être sérialisé, remplacez le sérialisateur par défaut pour votre modèle:
Dans App / Serializers / Person.js Code>: P>
export default DS.JSONSerializer.extend({
attrs: {
admin: { serialize: false }
}
});
Serialize: FALSE CODE> fonctionne parfaitement avec
ds.restserializer code> (Ember-Data V1.0.0-BETA.16.1).
C'est la solution la plus "correcte" recommandée. Voir également: Comment prévenir les données Ember à partir de l'attribut d'enregistrement (c.-à-d. Attribut en lecture seule) .
Voir Comment empêcher les données Ember de l'épargne attribut (c'est-à-dire l'attribut en lecture seule) pour savoir comment sauter un attribut à le backend.