2012-11-26 3 views
2

То, что я пытаюсь сделать что-то вроде этого:Добавить аргументы в виртуальном добытчика

Schema 
.virtual('getSomething') 
.get(function(what) { 
    if (!what) { 
     return this.somethingElse 
    } else { 
     return this.something[what] 
    } 
}) 

Проблема заключается в том, что мы не можем передать аргументы в виртуальном добытчика, как я могу добиться чего-то вроде этого без необходимости дублировать мой код?

ответ

5

Добавить в качестве instance method вместо виртуального геттера.

schema.methods.getSomething = function(what) { 
    if (!what) { 
     return this.somethingElse 
    } else { 
     return this.something[what] 
    } 
}; 
+0

Это именно то, что я искал, спасибо! – Calvein

+1

Действительно, это не замена виртуальных реквизитов, они совсем разные [виртуальные реквизиты сохраняются в модели, но методы прототипов не передаются реквестерам], но OP, похоже, не очень-то –

3

Геттеры не принимают каких-либо аргументов, потому что они должны заменить нормальный «получить атрибут» функциональность, без скобок. Так что вы потребность определить метод:

Schema.methods.getSomething = function(what) { 
    if (!what) { 
     return this.somethingElse; 
    } else { 
     return this.something[what]; 
    } 
}; 

, а затем вы можете просто позвонить:

mySchemaObject.getSomething("test"); 
Смежные вопросы