Je travaille à travers un tutoriel, la construction d'une petite bibliothèque DB Express et Mongoose. Dans le tutoriel, chaque livre peut avoir plusieurs statuts, et seulement une de ces valeurs. C'est un Enum. Je traitais cela en mettant un tableau de valeurs dans le schéma BookInstance:Impossible d'accéder à des variables de schéma dans Mongoose par la méthode statique
var the_statuses = ['Available', 'Maintenance', 'Loaned', 'Reserved'];
qui fonctionne très bien quand j'ai une instance - j'utiliser une méthode virtuelle pour récupérer ces valeurs
BookInstanceSchema
.virtual('statuses')
.get(function() {
return the_statuses;
});
quand je , comme dit, ont déjà une instance.
Et lors de la création du schéma j'accéder à ma variable locale, ainsi, une variable locale:
var BookInstanceSchema = Schema({
book: { type: Schema.ObjectId, ref: 'Book', required: true }, //reference to the associated book
imprint: {type: String, required: true},
status: {type: String, required: true, enum: the_statuses, default: 'Maintenance'},
due_back: {type: Date, default: Date.now},
});
Mais si je veux simplement les valeurs enum directement à partir du schéma, mais de en dehors la schéma? Autrement dit, si je veux créer, dans ce cas, une instance de BookInstance, et offrir à l'utilisateur un choix de statuts dans un menu de sélection, je ne vais pas avoir accès à une instance encore (à moins que je bidouille et simplement créer un pour saisir les valeurs enum).
J'ai essayé de faire une fonction statique
BookInstanceSchema.statics.getStatuses = function() {
return this.the_statuses;
};
Mais il ne semble pas fonctionner.
Quelle est la meilleure façon de faire ce que je suis en train de faire? Existe-t-il une "méthode virtuelle statique" dans Mongoose?
A travaillé parfaitement. Bien que j'ai programmé longtemps, ça a été dans d'autres langues et le "ça" de Javascript me lance parfois. Dans ce contexte, il faut être dans une instance pour se référer à 'ceci'? Si je comprends bien, 'ceci' fait référence à la structure objet/code à partir de laquelle une fonction est appelée - mais si vous appelez une méthode statique dans Mongoose, cela s'appelle _from_ quelque chose? Je pense que je suis peut-être en train de mixer et de mettre en correspondance la POO - ce à quoi je suis habitué - et le monde Javascript, mais je tiens à comprendre pourquoi votre solution a fonctionné. Mais de toute façon, merci! – Cerulean
Heureux que cela a aidé. Ouais, 'ceci 'est très bizarre dans JS, encore plus dans le contexte de Mongoose. Éditera la réponse avec quelques détails. – Nindaff