我正在使用类似于以下架构的东西 通过访问项目页面,我可以将相关项目添加到项目的相关项目数组字段中。
我想自定义验证我推送的对象
在我的下面的代码中,自定义验证不会触发。我希望这可能是因为自定义验证不能应用于type: [object]
,应该应用于对象的属性 - 但是我无法将对象作为一个整体进行测试。
const ItemsSchema = new SimpleSchema({
name: {
type: String,
label: 'Name',
},
related: {
type: [Object],
label: 'Related Items',
optional:true,
custom: function () {
let queryData = { docId: this.docId, related: this.value }
if (Meteor.isClient && this.isSet) {
Meteor.call("relatedObjectIsUniqueForThisItem", queryData,
function (error, result) {
if(!result){
console.log("not unique");
return "Invalid";
}
else{
return true;
}
});
}
}
},
'related.$.name':{
type: String,
label:'Name',
},
'related.$.code':{
type:String,
label:'Code',
min:5,
},
});
答案 0 :(得分:0)
我想出了解决这个问题的方法。
自定义验证不应该在[对象]上,而应该在对象的一个属性上 - 在这种情况下' source'或者'代码'。
在其中一个对象属性中,您可以调用this.siblingField(otherField);
但这意味着您必须重建该对象。
就我而言: -
const ItemsSchema = new SimpleSchema({
name: {
type: String,
label: 'Name',
},
related: {
type: [Object],
label: 'Related Items',
optional:true,
},
'related.$.name':{
type: String,
label:'Name',
custom: function () {
//---------------------------
//this is the important bit
//---------------------------
let queryData = {
docId: this.docId,
related: {
name:this.value,
code:this.siblingField('code').value,
}
}
//---------------------------
//end of important bit
//---------------------------
if (Meteor.isClient && this.isSet) {
Meteor.call("relatedObjectIsUniqueForThisItem", queryData,
function (error, result) {
if(!result){
console.log("not unique");
return "Invalid";
}
else{
return true;
}
});
}
}
},
'related.$.code':{
type:String,
label:'Code',
min:5,
},
});