在我的应用中,我使用accounts-github
。效果很好,但我有一个问题。
在我的一个模板中
Template.bar.rendered = function () {
if (Meteor.user()) {
// setup stuff
}
}
问题是,如果用户最初未登录,则此代码未执行(没关系)。但是当用户验证时,此代码不会再次执行。所以问题是如何在模板中监听这个变化(不必在rendered
函数内部?)?
答案 0 :(得分:2)
您可以使用Deps.autorun
。 (http://docs.meteor.com/#deps_autorun)
通常会为您的整个Meteor应用运行Deps.autorun
。如果你想让它只运行每个模板,你需要在渲染和销毁的模板回调中创建和停止它
e.g
var loginRun;
Template.bar.rendered = function() {
loginRun = Deps.autorun(function() {
if(Meteor.user()) {
//Stuff to run when logged in
}
});
}
Template.bar.destroyed = function() {
loginRun.stop();
}
如果您不需要它来运行每个模板(需要它在任何模板上为您的应用运行一次,那么您可以在客户端代码的任何位置单独使用Deps.autorun
Meteor.user()
是被动的,它会确保Deps.autorun回调在更改时再次运行,因此理论上可以在用户登录或注销时使用它来执行操作。
其他替代方案是在大气层上有一个提供登录和注销钩子的包,尽管它们基本上会像上面那样使用Deps.autorun来工作。见https://github.com/BenjaminRH/meteor-event-hooks
答案 1 :(得分:1)
我对类似问题的解决方案是
Template.bar.rendered
E.g。
Template.bar.events({
'click .loginButton' : function() {
if( Meteor.call.Login( username, pw ) )
{
$('#bar').html( Meteor.render( Template.bar ));
//jQuery is optional
}
});