是否有可能对Meteor用户进行被动的isVerified调用?

时间:2014-07-02 23:19:05

标签: javascript meteor

使用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()函数?

1 个答案:

答案 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。我建议不要在模板帮助程序中执行此操作,因为每次模板呈现并执行帮助程序时都会访问服务器,但是在代码中某处发生操作。例如,在用户完成注册后。或者当他们下次加载页面时。等