¿Alguien me puede ayudar con la siguiente duda?
Estoy usando la versión EmberJS 3.4 y tengo una ruta que parece
export default Route.extend({ model(){ const items = [{price: 10}, {price: 15}] return items }, });y un controlador que devuelve indefinido para el modelo
export default Controller.extend({ init(){ console.log(this.model); //returns undefined console.log(this); //has the model object as a property }, })ver esta imagen que contiene salida
Por alguna razón, this.model devuelve undefined pero cuando registro "this", tiene el objeto modelo como la propiedad enumerada.
Mi pregunta es, cuando accedo al modelo dentro de una propiedad calculada, ¿por qué la propiedad no está indefinida?
exportar controlador predeterminado.extender ({
subtotal: computed('this.model', function(){ return this.model.reduce((acc, item) => { return acc + item.price },0) // return 25 }), })Los controladores son singletons, por lo que no puede acceder al modelo en init .
cuando accedo al modelo dentro de una propiedad calculada, ¿por qué la propiedad no está indefinida?
Acceder a propiedades calculadas (y en ember más moderno, captadores nativos) es la única forma de tener un acceso reactivo a la propiedad del model . Esta "reactividad" mantiene todos sus datos sincronizados, y en Ember 3.4, las devoluciones de llamada de los computadores no se invocan hasta que también se resuelven las dependencias).
Más información
Por alguna razón, this.model devuelve undefined pero cuando registro "this", tiene el objeto modelo como la propiedad enumerada.
esto sucede porque registra un object , y los objetos en la consola no se copian a la consola, la referencia se procesa, por lo que si no es lo suficientemente rápido, todos los datos se resolverán / liquidarán en el momento en que los vea.