如果用户名已存在于 meteor-ionic 中,如何显示错误消息

How to display error message if username already exists in meteor-ionic

我已经使用 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"
}); 

现在的问题是,如果用户名已经存在,我该如何显示错误信息?

目前只显示ionic错误图标,不显示errStr:

我认为问题是我应该在 func 中 return userExists,但是我如何等待 userExists 方法服务器调用?

传递给 Meteor.call("userExists", value, function(err, userExists){ 的函数是服务器方法 returns 响应时将调用的回调,因此您已经在等待它完成。

meteor-useraccounts/core的源码来看,好像errStr只有在funcreturnstrue的时候才会用到。在您的情况下,因为对服务器的调用是异步的,所以 func 返回 undefined 被认为是 'no error'.

此外,图标旁边显示的是字段的状态,该状态由setError修改。

如果您将错误消息传递给 setError,它将正确显示。

解决办法是改:

self.setError(userExists);

至:

self.setError("Bad username");