Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在同一页面上显示Meteor.loginWithPassword callbak错误消息_Meteor_Meteorite - Fatal编程技术网

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

如何在同一页面上显示Meteor.loginWithPassword callbak错误消息,meteor,meteorite,Meteor,Meteorite,我创建了一个自定义登录页面,并使用Meteor.loginWithPassword(用户、密码、[callback])函数登录到应用程序 以下是登录模板: <template name ="Login"> <form class="login-form form-horizontal"> <div class="control-group"> <input class="em

我创建了一个自定义登录页面,并使用
Meteor.loginWithPassword(用户、密码、[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;
    }
});

登录
Template.Login.events({
“提交.登录表单”:函数(e,t){
e、 预防默认值();
//检索输入字段值
var email=t.find('.email').value,
password=t.find('.password').value;
Meteor.loginWithPassword(电子邮件、密码、函数(错误){
如果(错误){
$(“.alert占位符”).html(“”+err.message+“”)
}
});
返回false;
}
});
在调试时,我可以看到错误消息显示并添加到dom中。但它将得到刷新,消息将消失


meteor是否在meteor.loginWithPassword()之后重新呈现页面?如何克服这个问题?

在使用meteor时,如果您发现自己用jQuery手动注入html元素,那么可能是做错了。我不太了解blaze的内部结构,无法给你一个确切的答案来解释为什么你的元素没有被保存下来,但这里有一个更像流星的解决方案:

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


{{{#如果错误消息}
{{errorMessage}}
{{/if}
如果存在
err
,请在登录回调中设置
errorMessage
会话变量:

Meteor.loginWithPassword(电子邮件、密码、函数(错误){
如果(错误){
Session.set('errorMessage',err.message);
}
});
最后,添加模板帮助程序以访问
errorMessage
会话变量:

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

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

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

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

谢谢你的解决方案,大卫。我需要在不使用会话的情况下执行此操作。很有趣。。。您能说说为什么在您的情况下不允许使用会话变量吗?您可以使用另一种类型的被动变量吗?我需要在不使用会话的情况下使用。不使用会话就可以了。