用于更新的 SimpleSchema 中的 autoValue 未设置给定值
autoValue in SimpleSchema for update does not set given value
我在 SimpleSchema 中使用以下字段,
"fileNo": {
type: String,
label: "File No.",
autoValue: function() {
console.log('this', this);
console.log('typeof this.value.length ', typeof this.value.length);
console.log('this.value.length ', this.value.length, this.value.length === 0, this.value.length == 0);
console.log('this.value ', this.value, typeof this.value);
console.log('this.operator ', this.operator);
console.log('this.isSet ', this.isSet);
if ( this.isSet && 0 === this.value.length ) {
console.log('if part ran.');
return "-";
} else {
console.log('else part ran.');
}
},
optional:true
},
我正在使用 autoform
到 update
一个字段。问题是当我用空字符串 (即保持文本框为空) 更新字段时,值 -
未按照上面 SimpleSchema 代码中的字段定义设置。
我得到如下日志,
clients.js:79 this {isSet: true, value: "", operator: "$unset", unset: ƒ, field: ƒ, …}
clients.js:80 typeof this.value.length number
clients.js:81 this.value.length 0 true true
clients.js:82 this.value string
clients.js:83 this.operator $unset
clients.js:84 this.isSet true
clients.js:86 if part ran.
clients.js:79 this {isSet: true, value: "-", operator: "$unset", unset: ƒ, field: ƒ, …}
clients.js:80 typeof this.value.length number
clients.js:81 this.value.length 1 false false
clients.js:82 this.value - string
clients.js:83 this.operator $unset
clients.js:84 this.isSet true
clients.js:89 else part ran.
我的 collection 文档没有字段 fileNo
。
我错过了什么?我想要的只是当 fileNo
的值为 empty/undefined
时,值必须设置为 -
(连字符)。在文档中它必须看起来像 fileNo : "-"
你应该处理两种情况:
文档 insert
为空(未定义)value
for fileNo
.
文档 update
fileNo
为空 value
。
在第二种情况下,如果该字段的值为空字符串 (optional: true
),验证器将尝试从文档中删除该字段。我们可以抓住并防止这种情况。
fileNo: {
type: String,
label: 'File No.',
autoValue() {
if (this.isInsert && (this.value == null || !this.value.length)) {
return '-';
}
if (this.isUpdate && this.isSet && this.operator === '$unset') {
return { $set: '-' };
}
},
optional: true
}
已添加:用于编写此答案的文档(代码按预期工作;在本地测试):
我在 SimpleSchema 中使用以下字段,
"fileNo": {
type: String,
label: "File No.",
autoValue: function() {
console.log('this', this);
console.log('typeof this.value.length ', typeof this.value.length);
console.log('this.value.length ', this.value.length, this.value.length === 0, this.value.length == 0);
console.log('this.value ', this.value, typeof this.value);
console.log('this.operator ', this.operator);
console.log('this.isSet ', this.isSet);
if ( this.isSet && 0 === this.value.length ) {
console.log('if part ran.');
return "-";
} else {
console.log('else part ran.');
}
},
optional:true
},
我正在使用 autoform
到 update
一个字段。问题是当我用空字符串 (即保持文本框为空) 更新字段时,值 -
未按照上面 SimpleSchema 代码中的字段定义设置。
我得到如下日志,
clients.js:79 this {isSet: true, value: "", operator: "$unset", unset: ƒ, field: ƒ, …}
clients.js:80 typeof this.value.length number
clients.js:81 this.value.length 0 true true
clients.js:82 this.value string
clients.js:83 this.operator $unset
clients.js:84 this.isSet true
clients.js:86 if part ran.
clients.js:79 this {isSet: true, value: "-", operator: "$unset", unset: ƒ, field: ƒ, …}
clients.js:80 typeof this.value.length number
clients.js:81 this.value.length 1 false false
clients.js:82 this.value - string
clients.js:83 this.operator $unset
clients.js:84 this.isSet true
clients.js:89 else part ran.
我的 collection 文档没有字段 fileNo
。
我错过了什么?我想要的只是当 fileNo
的值为 empty/undefined
时,值必须设置为 -
(连字符)。在文档中它必须看起来像 fileNo : "-"
你应该处理两种情况:
文档
insert
为空(未定义)value
forfileNo
.文档
update
fileNo
为空value
。
在第二种情况下,如果该字段的值为空字符串 (optional: true
),验证器将尝试从文档中删除该字段。我们可以抓住并防止这种情况。
fileNo: {
type: String,
label: 'File No.',
autoValue() {
if (this.isInsert && (this.value == null || !this.value.length)) {
return '-';
}
if (this.isUpdate && this.isSet && this.operator === '$unset') {
return { $set: '-' };
}
},
optional: true
}
已添加:用于编写此答案的文档(代码按预期工作;在本地测试):