我是Meteor及其API /哲学的新手,所以我可能会以错误的方式思考这个问题。
我想在页面上显示一些新朋友请求,如果没有,则显示消息。这是一些代码:
// addfriend.js
Template.friendRequests.helpers({
friendRequests: function () {
return [
{ username: 'alice' },
{ username: 'carl' },
{ username: 'eve' },
];
},
hasFriendRequests: function () {
var template = Template.instance();
return template.helpers.friendRequests.length > 0;
}
});
// addfriend.html
<template name="friendRequests">
<h2>Friend requests</h2>
{{#if hasFriendRequests}}
<p>Someone's popular today!</p>
<ul>
{{#each friendRequests}}
<li>{{username}}</li>
{{/each}}
</ul>
{{else}}
<p>Sorry, nobody likes you right now.</p>
{{/if}}
</template>
我的问题是friendRequests
最终会成为MongoDB查询,我希望hasFriendRequests
不重复该查询。我只是想让它对friendRequests
助手采取行动。但是我上面的代码不适用于此。
更一般地说,我有兴趣将任何函数f
应用于昂贵的帮助程序,这样我就不必重新计算它。所以,如果你能照亮我,那就太棒了!
我能想到的一种方法是将数据放在Session
中并在那里工作。这是怎么做的?
任何帮助将不胜感激!
谢谢! 阿林
编辑:我意识到friendRequests.length
实际上在这里工作,但我仍然对如何在一般情况下这样做感兴趣。
答案 0 :(得分:0)
虽然这最终会成为mongodb查询,但您很可能会将此好友请求列表设置为已发布的集合。在meteor中,这意味着在初始页面加载时正在通过线路复制此集合,并且仅发送一次。
一旦进入客户端,您的朋友都会请求助手,而您的hasFriendRequests将使用相同的客户端数据。数据实际上被复制到客户端迷你mongodb数据库中,该数据库只有订阅的信息。
所以简短的回答是,只有一个数据库查询,因为流星将为你做所有的魔术。
关键在于设置您的出版物和订阅。所以假设你只玩腮红并订阅一次。你们都准备好了。