我使用Meteor Ionic Demo代码创建了我的新应用程序。现在,我没有使用电子邮件地址注册,而是想使用用户名。
我使用了这段代码(source):
// server/methods.js
if (Meteor.isServer){
Meteor.methods({
"userExists": function(username){
return !!Meteor.users.findOne({username: username});
},
});
}
// lib/config/at_config.js
AccountsTemplates.addField({
_id: 'username',
type: 'text',
required: true,
func: function(value){
if (Meteor.isClient) {
console.log("Validating username...");
var self = this;
Meteor.call("userExists", value, function(err, userExists){
if (!userExists)
self.setSuccess();
else
self.setError(userExists);
self.setValidating(false);
});
return;
}
// Server
return Meteor.call("userExists", value);
},
errStr: "Bad username"
});
现在问题是,如果用户名已经存在,我该如何显示错误消息?
目前,它仅显示离子错误图标,但不显示errStr
:
我认为问题是我应该在userExists
中返回func
,但是如何等待userExists
方法服务器调用?
答案 0 :(得分:1)
传递给Meteor.call("userExists", value, function(err, userExists){
的函数是当服务器方法返回响应时将调用的回调,因此您已经在等待它完成。
从meteor-useraccounts/core的源代码来看,errStr
仅在func
返回true
时使用。在您的情况下,由于对服务器的调用是异步的,func
正在返回undefined
,其被视为 '没有错误'
此外,图标旁边显示的是该字段的状态,该状态由setError
修改。
如果您将错误消息传递给setError
,它将正确显示。
解决方案是改变:
self.setError(userExists);
为:
self.setError("Bad username");