Comment représenter des tableaux à l'intérieur de braise-modèles de données?
Est-il nécessaire d'utiliser DS.hasMany
pointant vers un DS.Model
lorsqu'un modèle contient un tableau? Même si les éléments du tableau ne sont pas vraiment des modèles (pas de papiers d'identité ou de points de terminaison de leur propre)? Est-il un meilleur moyen?
Je suis en utilisant DS.hasMany
, mais mon prolongée DS.RESTAdapter
est en me jetant un 404 essayant d'accéder au modèle, même si je ne suis jamais appel find
sur elle, et hasMany
est appelée avec { embedded: true }
. Je vois cette erreur pour la première fois (apparemment en rapport avec ce modèle, puisqu'il s'en va sans lui):
Uncaught Error: assertion failed: Emptying a view in the inBuffer state is not allowed and should not happen under normal circumstances. Most likely there is a bug in your application. This may be due to excessive property change notifications. ember-latest.js:43
Qu'est-ce que cela signifie et ce qui pourrait être la cause?
Voici la trace de la pile:
Ember.assert ember-latest.js:43
Ember.View.states.inBuffer.empty ember-latest.js:13644
Ember.View.Ember.Object.extend.invokeForState ember-latest.js:12257
Ember.CollectionView.Ember.ContainerView.extend.arrayWillChange ember-latest.js:14477
invokeAction ember-latest.js:3193
iterateSet ember-latest.js:3175
sendEvent ember-latest.js:3323
Ember.Array.Ember.Mixin.create.arrayContentWillChange ember-latest.js:6963
Ember.ArrayProxy.Ember.Object.extend.arrangedContentArrayWillChange ember-latest.js:9281
Ember.ArrayProxy.Ember.Object.extend._arrangedContentWillChange ember-latest.js:9235
invokeAction ember-latest.js:3193
iterateSet ember-latest.js:3175
sendEvent ember-latest.js:3323
notifyObservers ember-latest.js:1872
Ember.notifyBeforeObservers ember-latest.js:2016
propertyWillChange ember-latest.js:2594
iterDeps ember-latest.js:2077
dependentKeysWillChange ember-latest.js:2092
propertyWillChange ember-latest.js:2592
set ember-latest.js:1416
DS.Model.Ember.Object.extend.dataDidChange ember-data-latest.js:3145
Map.forEach ember-latest.js:1273
OrderedSet.forEach ember-latest.js:1145
Map.forEach ember-latest.js:1271
DS.Model.Ember.Object.extend.dataDidChange ember-data-latest.js:3128
invokeAction ember-latest.js:3193
iterateSet ember-latest.js:3175
sendEvent ember-latest.js:3323
notifyObservers ember-latest.js:1872
Ember.notifyObservers ember-latest.js:1999
propertyDidChange ember-latest.js:2632
Ember.Observable.Ember.Mixin.create.propertyDidChange ember-latest.js:7917
Ember.Observable.Ember.Mixin.create.notifyPropertyChange ember-latest.js:7930
didChangeData ember-data-latest.js:2053
Ember.StateManager.Ember.State.extend.sendRecursively ember-latest.js:15446
Ember.StateManager.Ember.State.extend.send ember-latest.js:15431
DS.Model.Ember.Object.extend.send ember-data-latest.js:3058
DS.Store.Ember.Object.extend.load ember-data-latest.js:1737
DS.Store.Ember.Object.extend.loadMany ember-data-latest.js:1763
embeddedFindRecord ember-data-latest.js:3434
hasAssociation ember-data-latest.js:3459
ComputedPropertyPrototype.get ember-latest.js:2968
get ember-latest.js:1362
getPath ember-latest.js:1484
get ember-latest.js:1355
getWithGlobals ember-latest.js:4041
Binding.connect ember-latest.js:4140
connectBindings ember-latest.js:4600
finishPartial ember-latest.js:4610
Class ember-latest.js:8315
Ember.Mixin.create.create ember-latest.js:8457
Ember.View.Ember.Object.extend.createChildView ember-latest.js:13179
Ember.View.states.inBuffer.appendChild ember-latest.js:13622
Ember.View.Ember.Object.extend.invokeForState ember-latest.js:12239
Ember.View.Ember.Object.extend.appendChild ember-latest.js:13058
EmberHandlebars.ViewHelper.Ember.Object.create.helper ember-latest.js:18687
(anonymous function) ember-latest.js:18844
(anonymous function) ember-latest.js:19043
(anonymous function) ember-latest.js:19208
(anonymous function)
(anonymous function) handlebars-1.0.0.beta.6.js:1512
Ember.View.Ember.Object.extend.render ember-latest.js:12223
Ember.View.Ember.Object.extend.renderToBuffer ember-latest.js:12872
Ember.View.states.inBuffer.appendChild ember-latest.js:13625
Ember.View.Ember.Object.extend.invokeForState ember-latest.js:12239
Ember.View.Ember.Object.extend.appendChild ember-latest.js:13058
EmberHandlebars.ViewHelper.Ember.Object.create.helper ember-latest.js:18687
(anonymous function) ember-latest.js:18844
program2
(anonymous function) handlebars-1.0.0.beta.6.js:1529
Ember.View.Ember.Object.extend.render ember-latest.js:12223
Ember._HandlebarsBoundView.Ember._MetamorphView.extend.render ember-latest.js:18075
Ember.wrap.newFunc ember-latest.js:949
Ember.View.Ember.Object.extend.renderToBuffer ember-latest.js:12872
Ember.View.states.inBuffer.appendChild ember-latest.js:13625
Ember.View.Ember.Object.extend.invokeForState ember-latest.js:12239
Ember.View.Ember.Object.extend.appendChild ember-latest.js:13058
bind ember-latest.js:18129
(anonymous function) ember-latest.js:18199
(anonymous function) ember-latest.js:18271
program1
(anonymous function) handlebars-1.0.0.beta.6.js:1529
Ember.View.Ember.Object.extend.render ember-latest.js:12223
Ember.View.Ember.Object.extend.renderToBuffer ember-latest.js:12872
Ember.ContainerView.Ember.View.extend.render ember-latest.js:14078
Ember.View.Ember.Object.extend.forEachChildView ember-latest.js:12486
Ember.ContainerView.Ember.View.extend.render ember-latest.js:14077
Ember.wrap.newFunc ember-latest.js:949
Ember.View.Ember.Object.extend.renderToBuffer ember-latest.js:12872
Ember.View.states.inBuffer.appendChild ember-latest.js:13625
Ember.View.Ember.Object.extend.invokeForState ember-latest.js:12239
Ember.View.Ember.Object.extend.appendChild ember-latest.js:13058
EmberHandlebars.ViewHelper.Ember.Object.create.helper ember-latest.js:18687
(anonymous function) ember-latest.js:18844
(anonymous function) ember-latest.js:19043
(anonymous function) ember-latest.js:19208
(anonymous function)
(anonymous function) handlebars-1.0.0.beta.6.js:1512
Ember.View.Ember.Object.extend.render ember-latest.js:12223
Ember.View.Ember.Object.extend.renderToBuffer ember-latest.js:12872
Ember.ContainerView.Ember.View.extend.render ember-latest.js:14078
Ember.View.Ember.Object.extend.forEachChildView ember-latest.js:12486
Ember.ContainerView.Ember.View.extend.render ember-latest.js:14077
Ember.wrap.newFunc ember-latest.js:949
Ember.View.Ember.Object.extend.renderToBuffer ember-latest.js:12872
Ember.View.states.inBuffer.appendChild ember-latest.js:13625
Ember.View.Ember.Object.extend.invokeForState ember-latest.js:12257
Ember.View.Ember.Object.extend.appendChild ember-latest.js:13058
EmberHandlebars.ViewHelper.Ember.Object.create.helper ember-latest.js:18687
(anonymous function) ember-latest.js:18844
(anonymous function) ember-latest.js:19624
(anonymous function) ember-latest.js:18167
(anonymous function)
(anonymous function) handlebars-1.0.0.beta.6.js:1512
Ember.View.Ember.Object.extend.render ember-latest.js:12223
Ember.View.Ember.Object.extend.renderToBuffer ember-latest.js:12872
Ember.View.Ember.Object.extend.createElement ember-latest.js:12669
Ember.View.states.preRender.insertElement ember-latest.js:13558
Ember.View.Ember.Object.extend.invokeForState ember-latest.js:12257
invoke ember-latest.js:3428
iter ember-latest.js:3475
RunLoop.flush ember-latest.js:3531
RunLoop.end ember-latest.js:3447
Ember.run.end ember-latest.js:3639
autorun ember-latest.js:3705
Merci pour toute aide.
Mise à jour: Ce violon fonctionne (exemple de docs), mais comment pourrait-ces objets représentés si les tags ne sont pas de vrais modèles (i.e. n'ont pas d'Id)?
- est-ce tout simplement de définir un éventail habituel de propriété ne fonctionne pas ?
- J'ai mis à jour avec un violon. Comment dois-je procéder?
- Hum, je pense que si vous voulez que vos balises d'être persisté, vous avez à les décrire comme une DS.De modèle. Si non, alors il suffit de déclarer un éventail habituel de la Personne de modèle. Enfin, peut-être que je ne comprends pas ce que vous voulez...
- J'ai créé un violon avec un Tag déclaré comme une braise de l'objet: jsfiddle.net/Sly7/JBmuA/2
- Les luminaires ont été un exemple de ce que j'avais recevoir à partir du serveur. Donc, une braise pour but de faire, mais comment puis-je joindre le modèle? J'ai besoin de le charger à partir de la base de données, mais je ne se soucient pas de la manipuler. Est-ce possible ou est-il une meilleure pratique ici?
- Je ne pense pas que c'est possible sans la déclarer comme une DS.Modèle, au moins, je ne sais pas comment faire. Peut-être vous pouvez poster une question en ember-data repo, et, heureusement, vous avez une réponse...
- OK, j'ai trouvé que récemment fermé question (#322) fait référence à une ancienne discussion (#53) qu'ils "n'ont pas oublié" -- je ne sais pas si c'est exactement le même problème ou pas.
Vous devez vous connecter pour publier un commentaire.
Eh bien... C'était un peu difficile, mais le mélange de toutes les réponses dans ce post, je l'ai fait travailler.
Tout d'abord, vous devez créer un fichier de transformation pour le nouveau type "array":
Maintenant, dans votre modèle, juste l'utiliser comme un autre attr:
Et nous avons fini.
Rappelez-vous, lors de l'ajout d'éléments dans le tableau, à utiliser pushObject.
Dans un contrôleur:
J'espère que cela aide quelqu'un.
- Je utiliser un
raw
transformer, qui ressemble à ceci en ember-data de la révision 11:Puis, à l'intérieur d'un modèle, je fais ceci:
et peut utiliser
anArray
comme un tableau de n'importe où.Voici un exemple de création d'un tableau personnalisé de type en Ember-Data (version 10):
Maintenant, vous pouvez utiliser le type personnalisé dans un attribut de modèle:
Et maintenant, quand vous allez chercher un enregistrement avec:
ces deux entrants json dossiers de désérialiser correctement dans un Tableau:
ou
Dans Braise Données 1.0.0 Beta, l'un a été donné la possibilité de "s'inscrire", sa transformation personnalisée "sous-classe". Je préfère en parler comme d'une longue
DS.Transform
objet.DS
variable. Avez-vous comme une importation ou une variable globale?Si vous avez absolument besoin d'un custom structure de données à échanger avec votre serveur, vous pouvez enrichir
DS.attr.transforms
et de déclarer une nouvellearray
codec, par exemple.Voir le code source pour attribut existant codecs mise en œuvre. C'est un bon endroit pour commencer à ajouter vos propres.
Il est intéressant de noter toutes les 4 autres réponses à cette question ont presque identique désérialiser et sérialiser les fonctions, de sorte que vous pouvez simplifier les choses pour les:
C'est à l'aide de braise-cli-coffees6 pour coffeescript avec
import/export
soutienUn peu en retard pour le jeu ici, mais voici un jFiddle j'ai trouvé que c'est un simple de mise en œuvre de la déclaration d'un nouveau tableau codec
http://jsfiddle.net/Nook/ab2Xf/