Meteor.js:返回游标的非反应性快照

时间:2015-11-27 14:11:11

标签: javascript mongodb meteor cursor snapshot

我目前正从帮助者返回来自for x in open("words.txt",'r'): print x # Here i want to delete the line after printing and continue the loop 的光标。

Javascript控制器:

Meteor.users

HTML视图:

Template.rtcCarousel.helpers({
  rtcUsers: function() {
    if (Session.get("rtcSettings"))
    {
      let cursor = Modules.both.query.getRTCUsers(Session.get("rtcSettings"), 20);

      cursor.observe({
        added: ( item ) => {
          if (Session.get('viewMode') == 1)
          {
            // my css animation stuff here
          }
        }
      });

      return cursor;
    }
  }
});

关键是我的视图可以在两种模式之间切换:我希望光标更改在模式1时触发一些cs动画,在模式2时不要触摸。我的意思是:我甚至不想要如果由于接收了我的助手的#each而添加或删除文档时要重新呈现的视图。

我该如何处理?如何确保我的光标在模式2中不会改变?我希望它在返回时像非响应快照一样返回。

我想我需要一些Session值来自动重新计算帮助程序,然后我可以做一个棘手的事情,比如获取光标,快照id,然后用匹配的新查询切换返回的光标只有这个_id的文档,并等待会话切换回正常的被动用例,但这将非常棘手。

Meteor中没有办法快照光标的状态吗?

感谢您的指导!

1 个答案:

答案 0 :(得分:1)

您有两种可能的选择。

第一个是使用Tracker.nonreactive(func)

cursor = Tracker.nonreactive(Modules.both.query.getRTCUsers(Session.get("rtcSettings"), 20))

,第二个是禁用reactivity on the find

Modules.both.query.getRTCUsers = function (settings, limit, reactive) {
  return RTCUsers.find({settings: settings}, {limit: limit, reactive: reactive})
}

Modules.both.query.getRTCUsers(Session.get("rtcSettings"), 20, false);

或者可能是两者的组合,具体取决于您的用例。我会说要去组合,因为在你的助手中,你有Session本身就是被动的。然后你调用一个光标,它也是被动的。因此,根据具体情况,您可能会在反应性方面遇到其中一个。