如何在同一页面上显示Meteor.loginWithPassword回调错误消息

时间:2014-04-24 08:04:43

标签: meteor meteorite

我创建了一个自定义登录页面,并使用Meteor.loginWithPassword(user, password, [callback])功能登录该应用程序。

以下是登录模板:

    <template name ="Login">
        <form class="login-form form-horizontal">
            <div class="control-group">
                <input class="email" type="text" placeholder="Email">
            </div>
            <div class="control-group m-inputwrapper">
                <input class="password" type="password" placeholder="Password">
            </div>
            <div class="control-group">
                <button type="submit" class="submit t-btn-login" >Login</button>
            </div>        
        </form>
        <div class="alert-container">
            <div class="alert-placeholder"></div>
        </div>
    </template>

Template.Login.events({
    'submit .login-form': function(e, t) {
        e.preventDefault();
        // retrieve the input field values
        var email = t.find('.email').value,
            password = t.find('.password').value;

            Meteor.loginWithPassword(email, password, function(err) {
                if (err) {                   
                   $(".alert-placeholder").html('<div></div><div class="alert"><span><i class="icon-sign"></i>'+err.message+'</span></div>')
                }
            });


        return false;
    }
});

我在调试时可以看到显示的错误信息并添加到dom中。但它会刷新,消息将消失。

流星是否会在Meteor.loginWithPassword()之后呈现页面?我怎么能克服这个?

2 个答案:

答案 0 :(得分:3)

使用meteor时,如果你发现自己用jQuery手动注入html元素,你可能做错了。我不太了解火焰的内部结构,能够准确地回答为什么你的元素没有得到保留,但这里有一个类似流星的解决方案:

在警报容器中,有条件地呈现错误消息:

<div class="alert-container">
  {{#if errorMessage}}
    <div class="alert">
      <span><i class="icon-sign"></i>{{errorMessage}}</span>
    </div>
  {{/if}}
</div>

在您的登录回调中,如果errorMessage存在,请设置err会话变量:

Meteor.loginWithPassword(email, password, function(err) {
  if (err) {
    Session.set('errorMessage', err.message);
  }
});

最后,添加模板助手以访问errorMessage会话变量:

Template.Login.helpers({
  errorMessage: function() {
    return Session.get('errorMessage');
  }
});

答案 1 :(得分:0)

您可以使用Bert在每个页面中显示错误消息。我在登录页面中使用它,如下所示:

  Meteor.loginWithPassword(emailVar, passwordVar, function(error) {
            if (error) {

                Bert.alert(error.reason, 'danger', 'growl-top-right');
            } else {
                Router.go('/dashboard');
            }
        });
相关问题