varias una recorrer nxn matriz hacer ejemplo dimensiones declaracion declara con como array 10x10 javascript ember.js ember-data

una - matriz nxn javascript



¿Cómo se representan las matrices en los modelos de datos de brasas? (7)

Aquí hay un ejemplo de cómo crear un tipo de matriz personalizado en Ember-Data (versión 10):

DS.JSONTransforms.array = # If the outgoing json is already a valid javascript array # then pass it through untouched. In all other cases, replace it # with an empty array. This means null or undefined values # automatically become empty arrays when serializing this type. serialize: (jsonData)-> if Em.typeOf(jsonData) is ''array'' then jsonData else [] # If the incoming data is a javascript array, pass it through. # If it is a string, then coerce it into an array by splitting # it on commas and trimming whitespace on each element. # Otherwise pass back an empty array. This has the effect of # turning all other data types (including nulls and undefined # values) into empty arrays. deserialize: (externalData)-> switch Em.typeOf(externalData) when ''array'' then return externalData when ''string'' then return externalData.split('','').map((item)-> jQuery.trim(item)) else return []

Ahora puede usar el tipo personalizado en un atributo de modelo:

App.CalenderWeek = DS.Model.extend selected_days = DS.attr(''array'')

Y ahora cuando traes un registro con:

App.CalendarWeek.find(1)

ambos de estos registros json entrantes se deserializarán correctamente en una matriz:

{ selected_days: [''Monday'', ''Tuesday'', ''Saturday''] }

o

{ selected_days: ''Monday, Tuesday, Saturday'' }

¿Es necesario usar DS.hasMany apuntando a un modelo DS.Model cuando un modelo contiene una matriz? Incluso si los elementos de la matriz no son realmente modelos (sin ID ni puntos finales propios)? ¿Hay una mejor manera?

Estoy usando DS.hasMany , pero mi DS.RESTAdapter extendido DS.RESTAdapter está arrojando un 404 tratando de acceder al modelo, aunque nunca estoy llamando para find , y se llama a hasMany con { embedded: true } . Estoy viendo este error por primera vez (aparentemente en relación con este modelo, ya que se va sin él):

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é significa esto y qué podría estar causando?

Aquí está el rastro de la pila:

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

Gracias por cualquier ayuda.

Actualización: este violín funciona (con ejemplos de docs ), pero ¿cómo podrían representarse esos objetos si las etiquetas no son modelos reales (es decir , no tienen ID )?


Bueno ... Fue un poco difícil pero mezclando todas las respuestas en esta publicación lo hice funcionar.

En primer lugar, debe crear una transformación para el nuevo tipo "matriz":

DS.ArrayTransform = DS.Transform.extend({ deserialize: function(serialized) { return (Ember.typeOf(serialized) == "array") ? serialized : []; }, serialize: function(deserialized) { var type = Ember.typeOf(deserialized); if (type == ''array'') { return deserialized } else if (type == ''string'') { return deserialized.split('','').map(function(item) { return jQuery.trim(item); }); } else { return []; } } }); App.register("transform:array", DS.ArrayTransform);

Ahora, en su modelo, simplemente úselo como otro attr:

App.myModel = Ember.Model.extend({ name : DS.attr(''string''), cont : DS.attr(''array'') }

Y hemos terminado. Recuerde, al agregar elementos a la matriz, use pushObject.

En un controlador:

this.get(''model.cont'').pushObject(''new Item'');

Espero que esto ayude a alguien.


Curiosamente, las otras 4 respuestas a esta pregunta tienen funciones casi idénticas de deserialización y serialización, por lo que podría simplificar las cosas para:

import Em from ''ember'' import DS from ''ember-data'' # Presumably based on these answers: http://.com/questions/12168570/how-to-represent-arrays-within-ember-data-models # All we need to do is always make sure an array is returned from serialize or deserialize toArray = (data) -> switch Em.typeOf(data) when ''array'' then data when ''string'' then JSON.parse(data) else [] export default DS.Transform.extend deserialize: toArray serialize: toArray

Esto está usando ember-cli-coffees6 para coffeescript con soporte de import/export


En Ember Data 1.0.0 Beta , uno tiene la capacidad de "registrar" su "subclase" de transformación personalizada. Preferiría referirme a él como un objeto DS.Transform extendido.

DS.ArrayTransform = DS.Transform.extend({ deserialize: function(deserialized) { // ... return deserialized; }, serialize: function(serialized) { // ... return serialized; } }); App.register(''transform:array'', DS.ArrayTransform);


Si necesita absolutamente una estructura de datos personalizada para ser intercambiada con su servidor, puede enriquecer DS.attr.transforms y declarar un nuevo códec de array , por ejemplo.

Consulte el código fuente para la implementación de los códecs de atributos existentes. Es un buen lugar para comenzar a agregar el suyo.


Un poco tarde para el juego aquí, pero aquí hay un JFiddle que encontré que es una implementación simple de declarar un nuevo códec de matriz

http://jsfiddle.net/Nook/ab2Xf/


Utilizo una transformación sin raw , que se ve así en la revisión 11 de los datos de las brasas:

DS.RESTAdapter.registerTransform(''raw'', { deserialize: function(serialized) { return serialized; }, serialize: function(deserialized) { return deserialized; } });

Luego, dentro de un modelo, hago esto:

App.MyModel = Ember.Model.extend({ anArray: DS.attr(''raw'') });

y puede usar un anArray como una matriz regular en cualquier lugar.