Bit d'un intrus ...Backbone.js pas Itère collection
J'ai la collection:
class Store.Collections.Product extends Backbone.Collection
url: '/api/products'
model: Store.Models.Product
Avec la vue:
class Store.Views.Origin extends Backbone.View
initialize: ->
@collection = new Store.Collections.Product()
@collection.fetch()
@model.bind('change:formatted', @render, this);
@render()
events:
'change [name=origin]': 'setOrigin'
el: =>
@options.parent.$('.origin-input')[0]
template: JST["backbone/templates/shapes/product"]
render: ->
$this = $(this.el)
$this.html(@template(model: @model.toJSON(), errors: @model.errors))
console.log(@collection)
@collection.each(@appdenDropdown)
@delegateEvents()
this
appdenDropdown: (product) ->
console.log("append trigger")
#view = new Store.Views.Products(model: product)
#$('#history').append(view.render().el)
avec le modèle:
<div id="history"></div>
La collection fonctionne ... le
console.log(@collection)
affiche les données! cependant
@collection.each(@appdenDropdown)
Ne fait rien, ne fait pas d'erreur, ou par quoi que ce soit. Ça ne fait rien. J'essaie d'extraire les données de la collection! Mais il ne sera pas ...
Vérifier http://stackoverflow.com/questions/8413500/backbone-js-populating-a-collection/ 8415515 # 8415515 ou http://stackoverflow.com/questions/11459244/backbone-js-empty-array-attribute/11463190#11463190 – nikoshr
btw: pourquoi faire '$ this = ... 'quand VOUS AVEZ' this. $ El '. Je suggère de lire la documentation de backbone.js. – jakee
et effacez la réponse de nikoshr: collection.fetch est 'asynchrone' et vous affichez votre vue dans la méthode initialize probablement avant le retour de fetch, donc la collection est vide. Le fichier console.log est 'wtfsynchronous', donc il enregistre la collection comme étant remplie. Ce que vous avez à faire est de lier la méthode de rendu à l'événement reset de la collection pour vous assurer que la vue est restituée après que la collection soit remplie – jakee