Soy nuevo en ember-data. Estoy tratando de cargar la lista de comentarios desde una API usando varias llamadas a la API. La función de lista de comentarios funciona como se muestra a continuación,
El modelo de comentario se implementa de la siguiente manera,
export default CommentModel.extend( { parent: computed(function() { return get(this, 'store').queryRecord('comment', { _overrideURL: `comments/${get(this, 'id')}/parent`, }); }), children: computed(function() { return get(this, 'store').query('comment', { _overrideURL: `comments/${get(this, 'id')}/children`, }); }), ...
Como esta implementación, si el usuario hace clic en un comentario secundario (respuesta) de la lista de comentarios, la segunda llamada a la API cargará el comentario principal respectivo y el comentario principal volverá a cargar sus comentarios secundarios. Ese comportamiento hace que se vuelva a cargar el componente de la lista de comentarios en la interfaz de usuario.
¿Hay alguna otra forma en ember-data para la relación de carga diferida sin crear objetos ya existentes?
Si realmente necesita ir por ese camino, puede intentar realizar un findRecord
en lugar de un queryRecord
y usar adapterOptions
para personalizar el método urlForFindRecord
del adaptador de su modelo.
En mi humilde opinión, tiene un problema de flujo de datos en su diseño propuesto.
No debería ejecutar código asíncrono dentro de una propiedad calculada (ni devolver un objeto inmutable como respuesta de queryRecord
).
Las tareas funcionan muy bien para ese propósito.
No debería tener su modelo para cargar datos (eso debería ser responsabilidad de la ruta), lo que viola los principios MVC y DDAU.
Hay un gran artículo de 2015 sobre eso.
De hecho, desde ember octane, no debería usar propiedades calculadas en absoluto, han sido reemplazadas por captadores reales y propiedades rastreadas .
Ember es un gran marco, ¡buena suerte en tu viaje!