使用Meteor Accounts包,每个用户'电子邮件的属性为verified
。我想从客户端检查这个并反应性更新dom。简而言之,我有一个模板,列出了属于某个组的所有用户,并且我想标记那些已经响应发送给他们的sendVerification()电子邮件的用户。
想象:
<template name="users">
{{#each allusers}}
{{> user}}
{{/each}}
</template>
<template name="user">
<span>{{name}}</span>
<span class="{{isVerified}}">Verified</span?
</template>
使用:
Template.user.helpers({
isVerified: function(){
var user = this;
// return true if this user is verified (has replied to verification email)
Meteor.call('checkVerification', user, function(err, verified){
if (verified) return 'active';
else return '';
});
}
});
上面帮助程序的问题是Meteor.call没有被动反应,所以在我得到响应之前模板已经被渲染了。另一个问题是Meteor.users集合是(或应该)仅在服务器上可用,我不能允许客户订阅整个集合。
所以,除了在得到响应时使用jquery重绘dom之外,是否有一种很好的方法可以将它们连接在一起以创建一个有用的isVerified()
函数?
答案 0 :(得分:0)
只需在收到回调时更新会话值。
Template.user.isVerified = function(){
return Session.get("verified");
}
function checkVerified() {
var user = this;
// return true if this user is verified (has replied to verification email)
Meteor.call('checkVerification', user, function(err, verified){
if (verified) Session.set("verified", true);
});
}
然后随时致电checkVerified
。我建议不要在模板帮助程序中执行此操作,因为每次模板呈现并执行帮助程序时都会访问服务器,但是在代码中某处发生操作。例如,在用户完成注册后。或者当他们下次加载页面时。等