var Page = new Schema({
author: {
first_name: String
, last_name: String
}
});
Page.virtual("author.full_name").get(function() {
return this.author.first_name + " " + this.author.last_name;
});
// Later
myPage = new Page({author: {first_name: "John", last_name: "Doe"}});
myPage.author.full_name; // == undefined
myPage.get("author.full_name"); // == "John Doe"
рдореИрдВрдиреЗ рд▓реЗрдЦрдХ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╕реНрдХреАрдорд╛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЙрдк-рд╕реНрдХреАрдорд╛ рд╕рд░рдгреА рдПрдЯреАрдПрдо рдореЗрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рд╕рд╛рджреЗ рдЙрдк-рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВред
рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдЕрд╕рдВрднрд╡ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдмрд╕ рдХреБрдЫ рдЪрд╛рд▓рд╛рдХ рд╡рд┐рднрд╛рдЬрди ("ред") рддрд░реНрдХ рдЧреБрдо рд╣реИ рдЬрдмрдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдХреЛ рд╕реНрдХреАрдорд╛ рдкреЗрдбрд╝ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рд╡рд┐рдзрд┐ рдареАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред :)
рдмреЗрд╢рдХ рдпрд╣ рдлрд┐рдХреНрд╕ рдЙрдк-рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд▓реЗрдЦрдХ рдПрдХ рд╕рд░рдгреА рд╣реИ? рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП +1 рд╕рдорд░реНрдерди
рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП +100 рд╕рдорд░реНрдерди
рдЗрд╕реЗ рд╕рдордЭ рд▓рд┐рдпрд╛:ред
var Variation = new Schema({
label: {
type: String
}
});
// Virtual must be defined before the subschema is assigned to parent schema
Variation.virtual("name").get(function() {
// Parent is accessible
var parent = this.parent();
return parent.title + ' ' + this.label;
});
var Product = new Schema({
title: {
type: String
}
variations: {
type: [Variation]
}
});
рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдХреАрдорд╛ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
Variation.set('toJSON', {
virtuals: true
});
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдХреАрдорд╛ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: