2011-12-07 13 views
9

Por lo tanto, estoy aprendiendo backbone.js y actualmente estoy iterando sobre algunos modelos en una vista con el ejemplo siguiente. El primer fragmento funciona, cuando el otro basado en underscore.js no funciona. ¿Por qué?Iterar objetos con underscore.js

// 1: Working 
this.collection.each(function(model){ console.log(model.get("description")); }); 

// 2: Not working  
_.each(this.collection, function(model){ console.log(model.get("description")); }); 

¿Qué estoy haciendo mal, ya que no puedo verlo solo?

+2

¿Pasa * algo *? ¿Hay errores en la consola? – Pointy

+0

No. # 2 se ejecuta silenciosamente sin ningún resultado en la consola. – Industrial

Respuesta

22

this.collection es una instancia, mientras que this.collection.each es un método que itera el objeto correcto bajo las cubiertas que es la propiedad .models de una instancia de colección.

Dicho esto se puede probar:

_.each(this.collection.models, function(model){ console.log(model.get("description")); }); 

que es completamente inútil como this.collection.each es una función que hace similar a:

function(){ 
return _.each.apply(_, [this.models].concat([].slice.call(arguments))); 
} 

Así que también podría utilizar this.collection.each; P

+1

¡Gracias por tu explicación de por qué no funcionó junto con la solución! – Industrial

2

Además, podría intentar ...

_.each(this.collection.models, function(model){ 
    console.log(model.get("description")); 
}); 
Cuestiones relacionadas