Façon la plus simple pour réinitialiser l'épine Dorsale du modèle initial par défaut?
Mes modèles ont déjà un defaults
de hachage. Lorsque des parties de la vue/page sont remis à zéro, je souhaite réinitialiser les modèles à leur valeur d'origine par défaut.
Actuellement, je définir explicitement chaque attribut à sa valeur par défaut. Est-il rien de construit ou un JavaScript/trait de Soulignement.js/Ossature.js/jQuery fonction que je pourrais utiliser pour faire cela dans une seule déclaration?
Vous devez vous connecter pour publier un commentaire.
myModel = new MyModel()
.defaults
sera pas être désactivée à partir du modèle. Vous aurez probablement envie d'appeler.clear()
la première.{silent:true}
en tant que paramètre pour l'effacer pour éviter le changement de déclenchement de l'événementJe le fais quand le modèle est non-null initiale des propriétés de l'objet.
tout d'abord, définir par défaut en fonction
deuxième, lorsque nécessaires pour rétablir le modèle par défaut
_.result(model, 'defaults
) " pour gérer à la fois un objet ou une fonctiondefaults
de la propriété.Je suis venu avec l'approche suivante:
Avoir
{silent: true}
dans leclear()
appeler assure que lechange
événement n'est pas déclenché, il sera de feu que surset()
appel.Basé sur saabeilin's réponse et Épine dorsale du annoté source, je suis venu avec une fonction optimale pour combler le besoin pour la réinitialisation d'un modèle.
Réutilisables réinitialiser
La ligne suivante assure que même si un attribut est passé comme undefined
{ test: undefined }
, ça va encore avoir sa valeur par défaut.Voici un exemple:
L'Extension Dorsale
Et si vous le souhaitez avec tous épine Dorsale de modèles, vous pouvez étendre la Dorsale elle-même:
Avertissement: ne faites pas cela si vous êtes en train de rédiger une lib JavaScript ou Squelette plugin, car il pourrait entrer en collision avec une autre lib ou il pourrait provoquer un comportement différent de celui attendu par la personne à l'aide de votre code.
J'ai aussi pensé à utiliser
model.clear()
etmodel.set()
conjointement. Ensuite, j'ai couru à travers le problème, que je déclencher lachange
événement deux fois maintenant.À l'aide de la
silent
option lors de l'appel demodel.clear()
n'est pas une option, parce que je veux aussi avoir unchange
é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 avecundefined
valeurs pour les vieux attributs des touches de ne pas être présent dans le nouvel attribut de hachage.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 les nouveaux attribut.model.clear({silent: true})
, je déclencher un événement personnalisémodel:reset
.Qu'en remplaçant la valeur du modèle actuel avec un nouveau modèle :
change
événement surmyModel
et je l'écraser comme ça, un), il ne se déclenchera pas un événement de changement, et b) précédemment lié aux événements serait perdu.Mes solutions: