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)

これは私が期待するものを与えません。

翡翠でマングースの仮想作品を作る方法はありますか?

編集

問題は翡翠とは関係がないと思い
ます。セッションに「person」オブジェクトを保存します。セッションに保存する前に、「virtual」のすべてが正常に機能しますが、セッションから再度取得すると機能しません。
それはセッションメカニズムに関するものかもしれません。

4

1 に答える 1

2

使用している「セッションメカニズム」はわかりませんが、 connect-redisのようなものであれば、JSON.stringify(req.session)保存する前に呼び出します。これにより、マングースドキュメントが、ゲッター/セッター/仮想またはその他の動的機能を持たない静的なjavascriptオブジェクトに変換されます。セッションに保存されている仮想の現在の値も静的な値として使用する場合は、を呼び出すことをお勧めしますreq.session.person = doc.toJSON({ virtuals: true })

もう1つのオプションは、セッションから返された後、セッション担当者を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!
于 2012-04-26T22:55:54.113 に答える