除非刷新页面,否则不要限制删除旧的结果

时间:2014-08-28 16:20:47

标签: meteor

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>

2 个答案:

答案 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;
  } 
})

点击此处查看源代码:http://meteorpad.com/pad/d25X95QC9DKRGW7ZC

答案 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}});
  }
});