我正在通过教程,在Express和Mongoose中构建一个小型库DB。在本教程中,每本书可以具有几种状态之一,并且只有其中一种值。这是一个枚举。我通过将值的数组中的BookInstance模式处理这样的:无法通过静态方法访问Mongoose中的架构变量
var the_statuses = ['Available', 'Maintenance', 'Loaned', 'Reserved'];
时,我有一个实例,它工作得很好 - 我用一个虚拟的方法来获取这些值
BookInstanceSchema
.virtual('statuses')
.get(function() {
return the_statuses;
});
当我如上所述,已经有一个实例。
和创建访问我的本地变量,以及架构,局部变量时:
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},
});
但是,如果我想简单地直接从架构得到枚举值什么,而是从外的架构?也就是说,如果我想创建,在这种情况下,一个BookInstance实例,并提供用户在选择菜单中的状态选择,我将无法访问实例(除非我kludge它并简单地创建一个来获取枚举值)。
我试图使静态函数
BookInstanceSchema.statics.getStatuses = function() {
return this.the_statuses;
};
但它似乎并没有工作。
做我想做的事情的最佳方式是什么?在Mongoose中是否有这样的“静态虚拟方法”?
完美工作。虽然我已经编程了很长时间,但它已被用于其他语言,JavaScript的“this”有时会引发我的注意。在这种情况下,一个人必须在一个实例内引用“这个”?据我了解,'this'是指从中调用函数的对象/代码结构 - 但是如果您在Mongoose中调用静态方法,它会被称为_from_ something?我想我可能会混合和匹配OOP - 这是我习惯的 - 和JavaScript世界,但我渴望理解_如何解决您的解决方案。但无论如何,谢谢! – Cerulean
很高兴帮助。是的,这在JS中非常奇怪,在猫鼬的背景下更是如此。将编辑一些细节的答案。 – Nindaff