ruby-on-rails ember.js ember-data

ruby on rails - Emberjs+data+rails-UnEught TypeError: no se puede llamar al método ''map'' de undefined



ruby-on-rails ember.js (5)

Cuando estoy tratando de cargar datos de rails db con datos de emberjs + ember, recibo este error

Unkeught TypeError: no se puede llamar al método ''map'' de undefined

Aquí está el código de coffescript:

window.Cosmetics = Ember.Application.create Cosmetics.store = DS.Store.create revision: 4 adapter: DS.RESTAdapter.create bulkCommit: false Cosmetics.admin_user = DS.Model.extend({ name: DS.attr(''string'') email: DS.attr(''string'') }); Cosmetics.view = Ember.View.extend templateName: ''ember/views/aaa'' Cosmetics.admin_user.reopenClass url: ''admin/user'' Cosmetics.store.findAll(Cosmetics.admin_user)

El controlador obtiene datos JSON correctos. Intenté mapear el código de los ejemplos encontrados en Internet, pero nada me ayudó. ¿Algunas ideas? Creo que estoy haciendo algo mal. Gracias de antemano por cualquier ayuda.


Ember-Data espera encontrar todos los resultados anidados bajo la forma plural del modelo:

Qué datos de ember está esperando:

{ "users": [ { "activated": null, "created_at": "2012-05-14T19:35:44Z", "email": "[email protected]", "id": 1, "name": "john doe", "updated_at": "2012-05-15T20:23:06Z" } ] }

Qué está obteniendo en tu ejemplo:

[ { "activated": null, "created_at": "2012-05-14T19:35:44Z", "email": "[email protected]", "id": 1, "name": "john doe", "updated_at": "2012-05-15T20:23:06Z" } ]

Específicamente, el error viene de la respuesta de JSON y ejecutando el "mapa" sobre todo lo que está debajo de la tecla "usuarios", que en su caso no existe, por lo que se llama a "mapa" en "indefinido".


Tuve exactamente el mismo problema. Lo que me solucionó fue agregar el nodo raíz al representar el JSON en la acción de index en mi controlador. Eso significaba cambiar esta línea:

format.json { render json: @things }

a esto:

format.json { render json: { things: @things }}

Esto se debe a que Ember-data requiere el nodo raíz en el objeto JSON, pero Rails no lo incluye de forma predeterminada.

Espero que eso ayude.


¡Finalmente encontré la solución!

No estoy seguro de si esto debería hacerse de esta manera, pero fue suficiente para deshacerse de las confirmaciones masivas. Entonces, ¿cómo debería verse la tienda?

Cosmetics.store = DS.Store.create revision: 4 adapter: DS.RESTAdapter.create

bulkCommit: false estaba causando el Uncaught TypeError: Cannot call method ''map'' of undefined bulkCommit: false Uncaught TypeError: Cannot call method ''map'' of undefined error Uncaught TypeError: Cannot call method ''map'' of undefined .

Este problema parece estar relacionado solo con los datos de ascua cuando se usan en aplicaciones de rieles.

Parece que me apresuré un poco porque lo que parecía resolver el problema, causó otros;


Encontrado el problema, no estoy seguro acerca de la solución.

Si su recurso se sirve en un espacio de nombre, por ejemplo

App.Event = DS.Model.extend({ name: DS.attr(''string''), }); App.Event.reopenClass({ url: ''api/event'' })

Cuando ember-data analiza la respuesta json, hace algo como json[plural] en findAll que debe ser json[''events''] , sin embargo, el plural se calcula que es json[''api/events''] , y por lo tanto el error. Preguntaré alrededor y probablemente subiré un boleto para esto.

Actualizar

He creado un boleto para esto aquí

Solución

Como un hack, estoy haciendo esto:

def index respond_to do |format| format.json { render json: { ''api/events'': Event.all } } end end


La causa raíz del problema es la función de pluralizar en rest_adapter.js, por lo tanto, la solución es solucionarlo;)

DS.RESTAdapter.reopenClass({ pluralize: function(name) { if (!this.plurals[name]) name = name.substring(name.lastIndexOf(''/'')+1); return this.plurals[name] || name + "s"; } });