Tengo un enrutador accediendo a su colección. My for loop no estaba iterando a través de los modelos, así que intenté iniciar sesión en la colección para ver qué devolvía. Resulta que cuando registro la colección directamente veo todos los modelos como se esperaba. ¡Pero si trato de registrar el atributo de modelos de la colección, obtengo una matriz vacía! No tiene sentido. Estas líneas se siguen directamente entre sí. Intenté cambiar el orden y obtuve el mismo resultado.¿Por qué backbone.js devuelve una matriz vacía al acceder a los modelos?
console.log(this.collection);
=> Shots
_byCid: Object
_byId: Object
length: 15
models: Array[15]
__proto__: Shots
...
console.log(this.collection.models);
=> []
console.log(this.collection.length);
=> 0
¿Por qué sucedería esto?
Este es el código como lo es en el router para dar un mejor contexto de donde está disparando este código:
# Routers
class Draft.Routers.Shots extends Backbone.Router
routes:
'' : 'index'
'shots/:id' : 'show'
initialize: ->
@collection = new Draft.Collections.Shots()
@collection.fetch()
index: ->
console.log @collection
console.log @collection.models
¿Terminó la búsqueda y se restableció con éxito o agregó modelos a la colección en el momento de la sesión? – user500198
solo puedo suponer que sí, los 2 registros están uno detrás del otro, sería una cuestión de nanosegundos entre esas dos llamadas. aún es posible, pero al menos debería ser un resultado inestable si lo prueba varias veces ... no siempre se puede terminar de cargar justo entre esas dos llamadas de registro. – Sander
No entiendo por qué estaba registrando pero descubrí que necesito agregar un detector de eventos en la colección dentro de la vista para asegurarme de que se haya cargado. –