使用 Meteor Accounts 包,每个用户的电子邮件都具有已验证
属性。我想从客户端检查这一点并被动地更新 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 不是 react 性的,所以在我得到响应之前模板已经渲染了。另一个问题是 Meteor.users 集合(或应该)仅在服务器上可用,我不能允许客户端订阅整个集合。
那么,除了在收到响应时使用 jquery 重新绘制 dom 之外,是否有一个好的方法将其连接在一起以创建一个有用的 isVerified()
函数?
最佳答案
只需在收到回调时更新 session 值即可。
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
。我建议不要在模板帮助程序中执行此操作,因为每次模板呈现并执行帮助程序时,您都会访问服务器,但会在代码中发生操作的某个位置进行操作。例如,在用户完成注册后。或者当他们下次加载页面时。等等
关于javascript - 是否可以对 Meteor 用户进行响应式(Reactive) isVerified 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542596/