Posts.find({}, {sort: {date: -1}, limit: 3});
HTMl:
cat1
cat2
cat3
如果插入帖子,则会自动变为:
cat2
cat3
cat4
我怎么能防止这种情况发生?除非刷新页面,否则我希望所有结果都能叠加
<template name="temp">
<div class="posts">
{{#each posts}}
{{> cat}}
{{/each}}
</div>
</template>
答案 0 :(得分:0)
在这种情况下,您可以使用Meteor.methods。
每当客户端执行loadLatestPosts
函数时,方法getLatestPosts
就会被异步调用并发回数据。集合邮件服务器端的任何更新都不会更新客户端。这意味着您可以完全控制更新模板,但会失去反应性。
调用方法是异步的,这意味着您只能在回调中接收数据,因此没有选项可以直接返回。这就是Session
被用作代理的原因。
<template name="latestPosts">
<div class="posts">
{{#each posts}}
{{title}}
{{/each}}
</div>
</template>
Template.latestPosts.posts = function () {
return Session.get("posts");
};
var loadLatestPosts = function(){
Meteor.call('getLatestPosts', function(error,arr){
console.log(arr);
Session.set("posts",arr);
});
};
loadLatestPosts();
Meteor.methods({
'getLatestPosts':function(){
var arr = {sort: {date: -1}, limit: 3}).fetch();
console.log(arr && arr.length);
return arr;
}
})
答案 1 :(得分:0)
我认为您只想在模板助手中使用两个查询。一个获得新的更新,一个获得3个旧帖子。旧帖子必须在创建模板之前有一个日期,新帖子必须在创建模板后有一个日期。
下面的代码未经测试,但我认为这是处理新数据加载的常用方法。如果您需要更多示例,我很确定telescope是如何做到的。
所以你的模板变成了:
<template name="temp">
<div class="posts">
{{#each newPosts}}
{{> cat}}
{{/each}}
{{#each posts}}
{{> cat}}
{{/each}}
</div>
</template>
js成为:
var createdTime;
Template.temp.created = function(){
createdTime = new Date();
}
Template.temp.helpers({
posts: function(){
return Posts.find({date:{$lt: createdTime}}, {sort: {date: -1}, limit: 3}});
},
newPosts: function(){
return Posts.find({date: {$gt: createdTime}}, {sort: {date: -1}});
}
});