Quelle est la meilleure façon de remplacer le Modèle.get(attr) dans Backbone.js?
Je suis en utilisant Backbone.js pour la première fois, et l'aimer jusqu'à présent. Une chose que je ne peux pas pour le moment dans la dynamique des attributs de modèles. Par exemple, dire que j'ai une Personne de modèle, et je veux obtenir leur nom complet:
var Person = Backbone.Model.extend({
getFullName: function () {
return this.get('firstName') + ' ' + this.get('surname');
}
});
Ensuite, j'ai pu faire person.getFullName()
. Mais je tiens à assurer sa cohérence avec les autres méthodes, comme la plus person.get('fullName')
. Je ne vois pas comment faire sans messily primordial Personne#get. Ou est-ce ma seule option?
C'est ce que j'ai obtenu jusqu'à présent pour la primauté de l'option:
var Person = Backbone.Model.extend({
get: function (attr) {
switch (attr) {
case 'fullName':
return this.get('firstName') + ' ' + this.get('surname');
break;
case 'somethingElse':
return this.doSomethingClever();
break;
default:
return Backbone.Model.prototype.get.call(this, attr);
}
}
});
Je suppose que c'est pas terrible, mais il semble qu'il devrait y avoir une meilleure façon.
Vous devez vous connecter pour publier un commentaire.
Serait-ce plus simple?
Cette façon, vous pouvez également remplacer les attributs existants avec des fonctions. Qu'en pensez-vous?
if
surarguments.length==0
voir stackoverflow.com/questions/2141520/...Je pense à des attributs tels que les matières premières utilisées par un modèle d'apporter des réponses aux personnes qui posent les questions. En fait je n'aime pas avoir les appelants en savoir trop sur les attributs internes de la structure. C'est un détail d'implémentation. Si ce modifications de la structure?
Donc, ma réponse serait: ne pas le faire.
Créer une méthode que vous avez fait et masquer les détails d'implémentation. Son beaucoup plus propre code et survit à la mise en œuvre des changements.
.get(attr)
. Qui semble être la meilleure façon de cacher les détails d'implémentation, à mon humble avis.defaults
objet ou en créant des getters et setters. Tous les deux valides, mais s'en tenir à la norme.get(attr)
serait considérée comme de meilleure conception d'API: toute personne qui connaît le cœur de la bibliothèque, qui sait comment utiliser votre API.Les propriétés utilisées par le Modèle.obtenir sont stockées dans l'attribut de la propriété. Vous pourriez faire quelque chose comme ceci:
Cela vous permettra de faire de la personne.get('fullName') comme vous l'avez demandé.
Edit: Pour être clair, je suis d'accord avec le projet de Loi de réponse ci-dessous. Ne devrait pas vraiment être dinking autour de la mise en œuvre interne de backbone.js. Surtout que c'est incomplet...que sur l'évasion() au lieu de get()? Et le setter est plus complexe, comme c'est de la validation, de la notification des modifications, etc...maintenant, je suis désolé j'ai posté ceci 🙂