2012-04-21 124 views
0

我定義:貓鼬虛擬不在工作玉琅

var PersonSchema = new Schema({ 
    avatar: Number 
}); 
PersonSchema.virtual("avatarUrl").get(function() { 
    return "http://example.com/avatar/" + this.avatar; 
}); 

這一點也適用於節點的代碼喜歡:

PersonModel.findOne(function(err, person) { 
    console.log(person.avatarUrl); // http://example.com/avatar/1 
}); 

但在玉模板,如果我使用:

img(src!= person.avatarUrl) 

這不會給我所期望的。

有沒有什麼方法可以製作貓鼬虛擬作品?

編輯

我認爲這個問題是不是做玉,
事情怎麼把我救「人」對象在會議之前,我將它保存到會話,一切都在「虛擬」工作正常,但是當我再次從會話中獲得它時不起作用。
可能與會話機制有關。

+0

您是否嘗試了備用語法? '#{person.avatarUrl}'? – mindandmedia 2012-04-21 17:53:43

+0

我試過了,仍然無法正常工作。 – Kevin 2012-04-21 18:14:00

+0

您可以與我們分享的任何錯誤消息?和渲染請求的完整性... – mindandmedia 2012-04-21 18:15:10

回答

2

不確定你正在使用什麼'會話機制',但如果它的東西如connect-redis那麼它在存儲之前調用JSON.stringify(req.session)。這將一個mongoose文檔轉換成靜態javascript對象,沒有getters/setters/virtuals或其他動態能力。如果您希望將會話中存儲的虛擬機的當前值也作爲靜態值存儲,則可能需要致電req.session.person = doc.toJSON({ virtuals: true })

另一種選擇是將會話人從會話中返回後轉換爲MongooseDocument。

// assume the session has been retrieved already 
var person = new Person; 
person.init(req.session.person); 
req.session.person = person; 
console.log(req.session.person.someVirtual); // yay!