【发布时间】:2014-07-02 23:19:04
【问题描述】:
使用 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() 函数?
【问题讨论】:
-
提供“用户”模板的
this的助手在哪里?只是认为您的用户信息已经来自服务器,显而易见的事情就是在那时设置一个“isVerified”字段。 -
@user728291 我有同样的想法,但问题是 allUsers 正在从存储在单独的
Group对象中的数组中读取。我要么必须在该对象中维护一个单独的verified属性,这并不理想,要么在发布语句中检查每个用户的状态 - 这似乎很昂贵。 -
“昂贵”是一个相对术语。任何一种方法都需要相同的数据。您只是在客户端和服务器之间创建额外的流量,并将单个数据库调用拆分为多个。一次发布也更容易遵循代码。
标签: javascript meteor