Backbone.js constructeur personnalisé?
Je suis à la recherche de quelques exemples pour la création d'un constructeur personnalisé sur mes modèles. Je veux la structure du modèle et des données différemment puis il suffit de le définir comme attributs.
Quelqu'un peut-il me montrer des exemple de base de comment faire cela?
Merci!
- Vous pouvez transformer le serveur du JSON au besoin à l'aide
parse
(documentcloud.github.com/backbone/#Model-parse). Peut être devriez-vous préciser ce que vous essayez de faire, un exemple peut aider.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez vraiment surcharger le constructeur, passer une
constructor
propriétéBackbone.Model.extend()
, par exemple:Si vous voulez appeler l'intégré dans le constructeur de votre constructeur personnalisé, vous pouvez faire quelque chose comme:
Ou si vous ne voulez pas avoir à répéter le nom de la variable contenant la classe mère de tous les plus de la sous-classe, ou vous ne voulez pas à vous soucier de la valeur de la variable change, vous pouvez faire quelque chose comme ce qui suit:
Ou si vous préférez la voie @Claude suggère, mais répéter la sous-classe nom de la variable à l'intérieur de la sous-classe au lieu de la classe parent var nom:
Si vous voulez plus de conseils que cela, vous aurez à être plus précis sur ce que vous voulez accomplir.
Tout ce que vous voulez faire juste après l'intégré dans le constructeur de la fonctionnalité, vous devriez probablement faire dans
initialize()
.this
.this
sera toujours le point de l'objet créé, conduisant à une boucle infinie. Voir ma réponse pour plus d'info.__super__
puisque l'envoi de cette réponse.Comme je l'ai mentionner dans le commentaire, de prendre soin lors de l'utilisation de
this.constructor.__super__
(outhis.__super__
), de peur que vous vous retrouvez dans une boucle sans fin (Maximum call stack size exceeded
dans Chrome).Essayez les solutions suivantes dans la console (au propre risque, cela conduira à ladite boucle sans fin)
Raison en est que lors de la création de
B
,this
dans le constructeur deA
points à une instance deB
, doncthis.constructor.__super__.constructor
garde pointant vers le constructeur deA
, qui est appelé de nouveau et de nouveau.Si vous voulez "destiné comportement", utilisez l'une des syntaxes suivantes:
ou directement, sans
__super__
:C'est comment j'ai remplacer la valeur par défaut de la colonne vertébrale.Modèle constructeur:
Après que vous avez à faire assurez-vous de la colonne vertébrale.Collection prototype utilise la mise à jour de la colonne vertébrale.Modèle constructeur:
La "avantage" de cette approche, à mon avis, c'est que vous pouvez continuer à l'utiliser de la colonne vertébrale.Modèle de votre modèle de constructeur, ce qui rend le changement de manière plus transparente.
Si vous voulez écrire votre modèle par vous-même, comme ceci:
Être prudent, je pense que vous avez besoin de consulter
Backbone.Model
constructeur le code source. Mais je pense que ce n'est pas une bonne idée. Remplacerinitialize
méthode est la bonne façon:Backbone.Model
méthode initialize est vide, vous ne savez pas si il ya un point dans l'appel à elle.Il semble que vous êtes à la recherche pour le
initialiser
méthode. Il est appelé lorsque vous créez un nouveau modèle, et vous pouvez les utiliser si vous en avez besoin pour:Si vous cherchez à faire quelque chose de plus, vous pourriez remplacer le
constructor
méthode de la colonne vertébrale de base. C'est beaucoup plus délicat d'affaires, même si. Beaucoup mieux de travailler avec des méthodes exposées si vous le pouvez!initialize
, la manipuler à l'intérieur de la fonction, et réglez les attributs que vous devez à partir de là.constructor
est "exposé", et les docs de vous expliquer comment vous pouvez l'annuler.initialize
sert un but différent.Quelque chose d'être conscient de quand vous écrasez l'épine Dorsale.Modèle de constructeur - si vous n'appelez pas
Backbone.Model.apply
, puis le Modèle.cid ne peut pas être réglé.Qui est mauvais - Si cid n'est pas définie sur plusieurs modèles, de la collecte pensent que c'est un doublon du premier modèle de votre collection et ne lui permettra pas d'être ajouté.