【发布时间】:2016-08-24 03:01:59
【问题描述】:
我有一个示例代码,如下所示:
客户端助手:
getUsername: function (userId) {
Meteor.call("getUsername", userId, function (err, result) {
if(!err) {
Session.set("setUsername", result);
else {
console.log(err);
}
});
return Session.get("setUsername");
}
服务器
Meteor.methods({
"getUsername": function (userId) {
var x = Meteor.users.find({_id: userId}, {fields: {username:1}}).fetch()[0];
return x.username;
}
});
这段代码的结果是一个无限循环的用户名传递给客户端。有没有办法停止循环并仅传递客户端所需的数据?我相信反应性导致数据无限循环,我不知道如何停止它。我尝试在服务器中的查询中使用"reactive":false,但它不起作用。
【问题讨论】:
-
为什么将用户名设置为会话而不是直接返回?
-
@Areca - 情况是这样,我想尽量减少订阅和发布。因此,与其在帖子模板上发布和订阅用户,不如将帖子 user_id 作为参数传递给助手,然后使用 Meteor.call 在服务器上查找用户 ID 并返回用户名。在我的 HTML 中是这样的:
{{getUsername userId}} -
不要在助手中进行异步调用。在事件中执行它们,或者在这种情况下,模板的
onCreated回调。顺便说一句,您所做的将比仅将用户名作为出版物的一部分发布要慢。 -
@MichelFloyd - 好主意,让我试试看:)
-
@MichelFloyd - 我不确定如何将“userId”从
{{getUsername userId}}传递给 template.onCreated 。 . .我正在使用 kurounin:pagination 这很难加入两个集合,这就是为什么我采用这种方法来获取帖子的用户 ID 并在服务器上进行查找,而不是订阅用户集合并在客户端上进行查找.
标签: javascript meteor