60 votes

Le moyen le plus simple de réinitialiser le modèle Backbone aux valeurs par défaut initiales?

Mes modèles ont déjà un hash 'par défaut'. Lorsque certaines parties de la vue / page sont réinitialisées, je souhaite réinitialiser les modèles à leurs valeurs par défaut d'origine.

Actuellement, je règle explicitement chaque attribut sur sa valeur par défaut. Existe-t-il une fonction intégrée ou une fonction javascript / underscore.js / backbone.js / jquery que je pourrais utiliser pour le faire en une seule déclaration?

121voto

Peter Lyons Points 47794
myModel.clear().set(myModel.defaults);

5voto

codeboy Points 33

Je fais cela lorsque le modèle a des propriétés d'objet initial non nul.

tout d'abord, définir les valeurs par défaut comme une fonction

 var MyModel = Backbone.Model.extends({

    defaults:function(){

        return {
            AnArrayTypeProp:[]
        };
    }

});
 

deuxièmement, lorsque cela est nécessaire pour réinitialiser le modèle par défaut

 model.clear().set(model.defaults());
 

3voto

Johnny Points 167

J'ai aussi pensé à l'aide d' model.clear() et model.set() en conjonction. Ensuite, j'ai couru à travers le problème, que je déclencher l' change deux fois maintenant. À l'aide de l' silent option lors de l'appel d' model.clear() n'est pas une option, parce que je veux aussi avoir un change événement déclenché, lorsqu'une propriété devient vide.

J'ai fini avec l'ajout d'un model.reset() méthode. Il prend une nouvelle attributs de hachage et remplit cette valeur de hachage avec undefined valeurs pour les vieux attributs des touches de ne pas être présent dans le nouvel attribut de hachage.

Model.prototype.reset = function(attrs, options) {
    for (var key in this.attributes) {
        if (key in attrs) continue;
        attrs[key] = void 0;
    }

    return this.set(attrs, options);
};

De cette façon, vous réinitialiser les modèles anciens attributs et d'obtenir un valide change événement pour tous les anciens et nouveaux de l'attribut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X