我创建了一个自定义登录页面,并使用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()之后呈现页面?我怎么能克服这个?
答案 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');
}
});