我已经使用SimpleSchema 文档中引用的示例实现了自定义验证功能,用于验证用户名的唯一性。在示例中,如果发现用户名已经存在,则会进行异步调用并显示自定义验证消息。
有一个注释,表明如果所有表单字段都有效,则将提交表单,但是由于架构中指定的“唯一:真”要求,用户创建将失败。以下是示例文档中代码的相关部分:
username: {
type: String,
regEx: /^[a-z0-9A-Z_]{3,15}$/,
unique: true,
custom: function () {
if (Meteor.isClient && this.isSet) {
Meteor.call("accountsIsUsernameAvailable", this.value, function (error, result) {
if (!result) {
Meteor.users.simpleSchema().namedContext("createUserForm").addInvalidKeys([{name: "username", type: "notUnique"}]);
}
});
}
}
}
就我而言,我的代码在我测试激活码是否有效的地方工作,我什至获得了显示错误的界面,但是由于没有其他“模式”失败,尽管响应无效,表单仍会提交。 .. 我是否需要手动阻止表单提交(即使用 jQuery),或者我应该使用 SimpleSchema 中的某些内容?
activationCode: {
type: String,
label: "Activation Code",
max: 200,
min: 10,
regEx: /^(?=.*[A-Z])(?=.*\d).+$/,
custom: function() {
if (Meteor.isClient && this.isSet) {
Meteor.call("validateActivationCode", this.value, function(error, result) {
if (result && !result.isValid) {
Clients.simpleSchema().namedContext("signupForm").addInvalidKeys([{
name: "activationCode",
type: "notValid"
}]);
return false;
}
});
}
}
}
谢谢你