my-attic / articles

les articles pour mon blog
http://www.k33g.org
64 stars 30 forks source link

itération _.each(this.collection.models) #7

Open ghost opened 12 years ago

ghost commented 12 years ago

J'ai rajouter un lien <a href="javascript:void(0)" id="deleteAll">Supprimer les element de la collection</a> juste après le formulaire.

ensuite je déclare dans la définition du model

clear: function(id) {
            this.destroy();
            console.log("model id "+id+" removed ");
        }

Et la vue associée au formulaire

window.DocFormView = Backbone.View.extend({
      //bla bla...
        events : {
            'submit #myform' : 'addDoc',
            'click #test' : 'addAlert',
            'click #deleteAll' : 'deleteAll'
        },
      //bla bla...

      deleteAll : function(){
            _.each(this.collection.models, function( model ){
                model.clear(model.getId());
                //console.log(model.getTitle());
            } );
        }

    });

Le soucis est que si je n'appelle pas la méthode clear du model j'ai bien dans la console tout mes model présent dans la collection. Mais l'appel de la méthode clear ne me supprime pas l'ensemble de mes modèle seulement quelque uns sauf si je remplace

_.each(this.collection.models, function( model ){
                model.clear(model.getId());
                //console.log(model.getTitle());
            } );

par un

_.each(_.toArray(this.collection.models), function( model ){
                model.clear(model.getId());
                //console.log(model.getTitle());
            } );

je trouve ça étrange, d'autant plus que la doc Backbone indique collection.models Raw access to the JavaScript array of models inside of the collection.

Sans le _.toArray je passe tout de même un tableau et pourtant je suis obligé pour que ce soit fonctionnel de reconvertir un tableau en tableau Oo

j'ai peut être merdé quelque part. . . (Désolé pour le pavé)

k33g commented 11 years ago

Voici ce que j'ai pu trouvé : (et tu as raison c'est super curieux)

j'ai créée une issue chez Backbone au moins pour qu'ils m'expliquent le comment du pourquoi : https://github.com/documentcloud/backbone/issues/1652

j'espère avoir une réponse, parce que ta solution fonctionne, mais je voudrais comprendre

et après je complèterais le tuto

k33g commented 11 years ago

la réponse : https://github.com/documentcloud/backbone/issues/1652#issuecomment-8594109