流星 - 限制设置的光标不是被动的

时间:2014-12-04 00:51:49

标签: meteor

我不知道这是否是错误,但是当我指定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
        };
    },

1 个答案:

答案 0 :(得分:1)

它是反应性的。

如果我创建一个默认应用并像这样修改

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控制台手动插入反应性更新