如果meteor-ionic

时间:2015-08-21 08:42:45

标签: javascript meteor meteor-accounts

我使用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

meteor-ionic-username-in-use

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

1 个答案:

答案 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");