2014-12-04 61 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控制檯手動插入反應更新