Как отобразить сообщение об ошибке, если имя пользователя уже существует в метеоро-ионном

Я использовал код Meteor Ionic Demo для создания нового приложения. Теперь вместо регистрации с адресом электронной почты я хочу использовать имена пользователей.

Я использовал этот код (источник):

// 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?


person user3475602    schedule 21.08.2015    source источник


Ответы (1)


Функция, переданная Meteor.call("userExists", value, function(err, userExists){, является обратным вызовом, который будет вызван, когда метод сервера вернет ответ, поэтому вы уже ждете его завершения.

Из исходного кода meteor-useraccounts/core кажется, что errStr используется только тогда, когда возвращается func true. В вашем случае, поскольку вызов сервера является асинхронным, func возвращает undefined, что считается 'нет ошибки'.

Кроме того, рядом со значком отображается статус поля, и этот статус изменяется с помощью setError.

Если вы передадите сообщение об ошибке setError, оно будет отображаться правильно.

Решение состоит в том, чтобы изменить:

self.setError(userExists);

to:

self.setError("Bad username");
person manji    schedule 23.08.2015