2012-04-21 144 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!