Backbone.js: Comment puis-je forcer l'Affichage pour actualiser automatiquement en cas de changement de modèles de la collection
Donc, j'ai un Affichage qui ressemble à cela.
//base class
var SelectListView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'addOne', 'addAll');
this.collection.bind('reset', this.addAll);
},
addAll: function() {
this.collection.each(this.addOne);
},
events: {
"change": "changedSelected"
},
changedSelected: function() {
this.selected = $(this.el);
this.setSelectedId($(this.el).val());
}
});
//my extended view
var PricingSelectListView = SelectListView.extend({
addOne: function(item) {
$(this.el).append(new PricingView({ model: item }).render().el);
}
});
J'ai instancié à la vue comme cela...
var products = new ProductPricings();
var pricingsView = new PricingSelectListView({
el: $("#sel-product"),
collection: products
});
Quelque part d'autre (un autre vues méthode personnalisée)j'ai mis à jour le prix de la vue de la collection de
pricingsView.collection = new ProductPricings(filtered);
Ce n'est pas de faire quoi que ce soit.
pricingsView.render();
Donc, maintenant, la collection a moins d'éléments, mais le nouveau point de vue n'est jamais rendus ou actualisé dans les DOM.
Comment je fais, je 1.) actualiser le rendu dans les DOM? 2.) Faire actualiser automatiquement les DOM? Dois-je en quelque sorte le dire à rendre quand jamais la collecte des changements?
OriginalL'auteur ctrlShiftBryan | 2012-01-05
Vous devez vous connecter pour publier un commentaire.
Lié
addOne()
à unreset
événement. Quand vous venez de remplacer lepricingsView.collection
instance alors que l'événement n'est pas déclenché etaddOne()
n'est pas exécutée.Essayez plutôt:
OriginalL'auteur kubetz
Cela pourrait fonctionner puisque vous lier à la collecte de l'événement de réinitialisation déjà:
http://backbonejs.org/#Collection-reset
Vous avez toujours modifier votre logique de rendu pour enlever l'ancien balisage à partir de la vue lors de la réinitialisation se produit.
OriginalL'auteur Heikki