我有一个Meteor方法,它返回我的应用程序上的所有用户帐户
returnUsers: function(){
return Meteor.users.find().fetch();
}
我正在使用new ReactiveVar
将Meteor方法的返回值传递给我的模板助手:
Template.listViewTemplate.created = function (){
var self = this;
self.myAsyncValue = new ReactiveVar("Waiting for response from serv er...");
Meteor.call('returnUsers', function (err, users) {
if (err)
console.log(err);
else
self.myAsyncValue.set(users);
});
}
Template.listViewTemplate.helpers({
userCollection: function(){
return Template.instance().myAsyncValue.get();
}
});
但是当我将用户渲染到视图中时,我收到一个读取
的控制台错误{{#each}}目前只接受数组
当我在没有#each
迭代器的情况下渲染时,使用
<ul id='usersList'>
{{userCollection}}
</ul>
我的网页上的输出准确反映了用户数量(2),但是读取
[object Object],[object Object]
我很确定这里有一些蠢事,因为我正在使用全球Meteor集合(Meteor.users.find().fetch()
,而不是定义我自己的集合),但我不知道如何绕过它。
我想显示所有用户的列表,以便当前用户可以点击其他用户并与他们共享文档 - 不知道如何解决这个问题。
答案 0 :(得分:2)
ReactiveVar不喜欢数组。您可以安装ReactiveArray package,它应该完全符合您的要求。
根据mper的评论
在最新版本的Meteor中,您可以将数组放入ReactiveVar中。
经过测试
答案 1 :(得分:2)
您不需要为此使用反应变量。 Template.listViewTemplate.created
中的函数不是自动运行中的容器,这意味着:它不会被重新计算。
您的方案的最佳方法是:使用变量获取状态(加载,加载,错误)和另一个变量以保存数组本身附加到self。反应性很酷但你应该只在需要时使用它。
关于:
[object Object],[object Object]
这种情况正在发生,因为您没有从提供的对象中提取任何值,也没有使用{{#each}}进行循环。
您列出用户的解决方案既危险又低效。您正在向客户端发送用户集合中的所有字段,包括登录令牌。
最好的方法是创建一个仅发送必需字段的订阅,例如:_id,info.firstName。您还应该为列表用户提供一些条件并使用分页。为此目的,还要考虑一个搜索功能。
答案 2 :(得分:1)
我对你的问题有几点评论:
您的方法不需要.fetch()
。当您在集合上调用find()
时,例如Meteor.users
,将返回光标。模板(特别是#each
)可以遍历游标。游标通常更好,因为您不会立即将整个集合加载到内存中 - fetch
。
流星集合已经被反应,这意味着如果它们发生变化,它们也会触发模板上的更改。因此,您无需使用ReactiveVar
来包装您的集合。
您不需要使用方法来获取用户,事实上,您不应该这样做,因为通常您希望对本地存储的数据库进行查询,而不是调用服务器。只需直接在模板助手中调用Meteor.users.find()
即可。您可以(并且应该)通过subscriptions控制本地可用的内容。
#each
与else
您可以在模板中使用以下内容:
{{#each userCollection}}
...
{{else}}
Waiting for response from server...
{{/each}}
如果userCollection
为空,模板将呈现else
块,就像您想要的那样。
删除您的方法并将onCreated
包含在内,将模板助手中的内容更改为return Meteor.users.find()
并使用{{#each userCollection}}...{{else}}Waiting for response from server...{{/else}}
在Meteor的最新版本中,您可以将数组放入ReactiveVar
。
答案 3 :(得分:-1)
Template.onCreated(function(){})
只运行一次,流星方法只运行一次
你需要反应。
收藏品反应意义pub/sub
。
您需要创建一个publish function
,允许某些用户获取数据库中的其他用户。因此,如果currentUser有权读取所有用户信息,则可以使用。我也限制字段。