我有一些键,例如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'
}
}
答案 0 :(得分:1)
我会在这个非常好的软件包的帮助下做到这一点:matb33:collection-hooks这将在你的集合之前和之后添加。所以你可以像这样添加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
});
因此,在插入生效之前始终触发上面的exmaple。这适用于CollectionName.update();
CollectionName.before.update(function (userId, doc) {
doc.updatedAt = new Date();
});
每当您更新集合时都会触发此操作。
答案 1 :(得分:1)
创建子架构&然后将它包含在每个集合中,注意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
}
}
]);