将某些自动值键应用于所有 SimpleSchemas
Apply certain autovalue keys to all SimpleSchemas
我有某些键,例如 createdAt 和 updatedAt,它们应该在所有模式中定义。有没有办法避免代码重复?
我使用 SimpleSchema 包。
我的所有 Schemas.xxx
都需要以下代码
createdAt: {
type: Date,
optional: true,
autoValue: function() {
if (this.isInsert) {
return new Date;
} else if (this.isUpsert) {
return {$setOnInsert: new Date};
} else {
this.unset();
}
},
autoform: {
type: 'hidden'
}
},
updatedAt: {
type: Date,
optional: true,
autoValue: function() {
if (this.isUpdate) {
return new Date();
}
},
autoform: {
type: 'hidden'
}
}
我会在这个非常好的包的帮助下做到这一点:matb33:collection-hooks 这会在你的 collections 之前和之后添加挂钩。所以你可以像这样添加 createdAt 和 updatedAt 字段:
对于CollectionName.insert();
CollectionName.before.insert(function (userId, doc) {
var currentDate = new Date();
doc.createdAt = currentDate;
doc.updatedAt = currentDate; // could be also null if you want
});
所以在上面的例子中总是在插入生效之前触发。这是 CollectionName.update();
CollectionName.before.update(function (userId, doc) {
doc.updatedAt = new Date();
});
每当您更新 collection 时都会触发此事件。
创建一个子模式,然后将其包含在每个集合中,请注意 SimpleSchema
构造函数现在采用数组。
Schema._Basic = new SimpleSchema({
userId: {
type: String,
optional: true
},
createdAt: {
type: Date,
label: 'Created at'
},
updatedAt: {
type: Date,
label: 'Updated at',
optional: true
},
}
});
Schema.Client = new SimpleSchema([Schema._Basic,
{
address: {
type: String
optional: true
}
}
]);
我有某些键,例如 createdAt 和 updatedAt,它们应该在所有模式中定义。有没有办法避免代码重复?
我使用 SimpleSchema 包。
我的所有 Schemas.xxx
都需要以下代码createdAt: {
type: Date,
optional: true,
autoValue: function() {
if (this.isInsert) {
return new Date;
} else if (this.isUpsert) {
return {$setOnInsert: new Date};
} else {
this.unset();
}
},
autoform: {
type: 'hidden'
}
},
updatedAt: {
type: Date,
optional: true,
autoValue: function() {
if (this.isUpdate) {
return new Date();
}
},
autoform: {
type: 'hidden'
}
}
我会在这个非常好的包的帮助下做到这一点:matb33:collection-hooks 这会在你的 collections 之前和之后添加挂钩。所以你可以像这样添加 createdAt 和 updatedAt 字段:
对于CollectionName.insert();
CollectionName.before.insert(function (userId, doc) {
var currentDate = new Date();
doc.createdAt = currentDate;
doc.updatedAt = currentDate; // could be also null if you want
});
所以在上面的例子中总是在插入生效之前触发。这是 CollectionName.update();
CollectionName.before.update(function (userId, doc) {
doc.updatedAt = new Date();
});
每当您更新 collection 时都会触发此事件。
创建一个子模式,然后将其包含在每个集合中,请注意 SimpleSchema
构造函数现在采用数组。
Schema._Basic = new SimpleSchema({
userId: {
type: String,
optional: true
},
createdAt: {
type: Date,
label: 'Created at'
},
updatedAt: {
type: Date,
label: 'Updated at',
optional: true
},
}
});
Schema.Client = new SimpleSchema([Schema._Basic,
{
address: {
type: String
optional: true
}
}
]);