2012-09-11 18 views
7

tengo el siguiente modelo Emberjs datos:Emberjs datos Cómo cargar hasMany-Data tarde

App.File = DS.Model.extend({ 
    like: DS.attr('boolean'), 
    comments: DS.hasMany('App.Comment') 
}); 

App.Comment = DS.Model.extend({ 
    file: DS.belongsTo('App.File'), 
    comment: DS.attr('string') 
}); 

y la precarga con:

App.store.load(App.File, {id: 1, like: false}); 

Ahora pensé, si me da los comentarios como este :

var f = App.store.find(App.File, 1); 
var c = f.get("comments"); 

var c es un EmberArray vacío y se envía una solicitud al servidor. ¿Pero no recibo una solicitud? ¿Por qué y cómo debo hacerlo? Realmente no quiero precargar los comentarios.

Más aún, si añado un comentario, pero también cambiar el archivo de forma simultánea:

f.get("comments").createRecord({comment: "test"}); 
f.set("like", true); 
App.store.commit(); 

dos solicitudes se envían al servidor. Pero si luego devuelvo el siguiente JSON (para el archivo):

{ "id": 1, like: true } 

Mi primer comentario visible desaparece de nuevo. ¿Por qué? ¿Y qué tengo que hacer?

Gracias por su ayuda!

Respuesta

1

En cuanto a la primera parte de su pregunta: Debe rellenar los identificadores de comentarios en los datos del archivo:

App.store.load(App.File, {id: 1, like: false, comments: [1, 2, 3]}); 

Así que los comentarios serán cargado ligeramente cuando sea necesario.

En cuanto a la segunda parte: Ciertamente no serializa los ids de comentarios en la respuesta de su servidor, por lo que los comentarios se restablecen, ya que describe una lista de comentarios vacía.

Al menos debe devolver los ID de los comentarios como se muestra justo antes ... Los dos problemas están vinculados.

+0

Gracias por la respuesta rápida. De acuerdo. ¿No hay otra manera? De esta forma, se obtienen mucho más sql-querys para los datos, que en la mayoría de los casos, no los necesito. Y no ayudará para el segundo problema, porque la primera solicitud al servidor es la solicitud del archivo actualizado. Y la segunda solicitud es la solicitud de agregar comentario. Tal vez funcionaría, si agrego un segundo commit-command después de createRecord. –

+0

Prefiero el mecanismo utilizado con findQuery. La primera vez que use el atributo de comentarios, un findQuery se pasará al servidor. –

+1

Me encontré con un problema similar. Sería bueno si en lugar de requerir los identificadores para una llamada findMany, admitirían la recuperación a través de un findQuery utilizando la clave externa. Decidí simplemente agregar un método "getComments" a mi modelo que ejecuta el findQuery. – jhorman

0

Parece parte de la respuesta a esto es utilizar el método DS.Adapter.findAssociation(...) en su adaptador. Sin embargo, estoy teniendo el mismo problema que cuando el registro principal se carga nuevamente desde el servidor: todos los registros secundarios se eliminan.

He publicado my own question para ver si puedo resolver este problema. Si se responde a esa pregunta, probablemente también sea la respuesta a la tuya.

Cuestiones relacionadas