2014-12-04 57 views
1

我不知道这是否是错误,但是当我指定limit时,如果客户端上的某些数据已经存在于客户端采集。流星 - 光标与极限设置不反应

例如,如果有限制:4,并且已有1条记录匹配,则比 返回一条记录,并且当接下来的3条记录是查询的时候,从服务器到达时,光标不响应(我期待 它将被再次评估,它将返回所有这4条记录)。

我发现它是因为当我取消注释所有记录的行时,我的应用程序工作(因为该光标将反映新数据可用)。您可以看到该查询是相同的,只有limit除外。

messages = Messages.find(selector, {sort: {created: -1}, limit: MessagesAPI.LIMIT}).fetch(); 
//Messages.find(selector, {sort: {created: -1}}).fetch()); 
// if i uncomment the previous line, it works 

更多代码

getMeteorState: function() { 
     console.log("zde"); 
     var time = this.getParams().time; 
     var dir = this.getParams().dir; 
     //TODO: maybe check time and dir validity or let it crash ? 
     var ready = Session.get("messages-ready"); 
     var params = {sort: MessagesAPI.sort.NEW, dir: dir == "prev" ? MessagesAPI.dir.PREV : MessagesAPI.dir.NEXT}; 
     if (time) { 
      var d = new Date(); 
      d.setTime(time); 
      params.date = d; 
     } 
     Meteor.subscribe("messages", params, function() { 
      console.log("ready"); 
      Session.set("messages-ready", true); 
     }); 

     var messages = []; 
     if (ready) { 
      var selector = {}; 
      if (time && dir) { 
       selector.created = {}; 
       var cond = (dir == "prev" ? "$lt" : "$gt"); 
       var date = new Date(); 
       date.setTime(time); 
       selector.created[cond] = date; 
      } 
      messages = Messages.find(selector, {sort: {created: -1}, limit: MessagesAPI.LIMIT}).fetch(); 
      //console.log(selector); 
      // when i uncomment this, it will work 
      //console.log(Messages.find(selector, {sort: {created: -1}}).fetch()); 
     } 
     return { 
      messages: messages 
     }; 
    }, 
+0

如果将.fetch()关闭,会发生什么情况? – 2014-12-04 01:15:46

+0

@KeithNicholas:在消息中将只是一些LocalCollection实例 – Krab 2014-12-04 01:28:39

+0

你怎么使用它? – 2014-12-04 01:38:38

回答

1

它是反应性的。

如果我创建一个默认的应用程序和MOD它像这样

Messages = new Mongo.Collection("messages"); 

if (Meteor.isClient) { 
    // counter starts at 0 
    Session.setDefault("counter", 0); 

    Template.hello.helpers({ 
    counter: function() { 
     return Session.get("counter"); 
    }, 
    messages: function() { 
     var messages = Messages.find({},{sort: {text: -1}, limit: 4}).fetch(); 
     return messages; 
    } 
    }); 

    Template.hello.events({ 
    'click button': function() {  
     Session.set("counter", Session.get("counter") + 1); 
     Messages.insert({text: Session.get("counter")}); 
    } 
    }); 
} 

和HTML

<head> 
    <title>reactive</title> 
</head> 

<body> 
    <h1>Welcome to Meteor!</h1> 

    {{> hello}} 

</body> 

<template name="hello"> 
    <button>Click Me</button> 
    <p>You've pressed the button {{counter}} times.</p> 

    <div> 
    {{#each messages}} 
    {{text}} 
    {{/each}} 
    </div> 
</template> 

没问题。通过Mongo控制台手动插入反应更新