【问题标题】:Meteor.js : return a non-reactive snapshot of a cursorMeteor.js :返回游标的非反应快照
【发布时间】:2016-03-01 18:19:29
【问题描述】:

我目前正在从帮助程序返回来自 Meteor.users 的光标。

Javascript 控制器:

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

HTML 视图:

<template name="rtcCarousel">
  {{#each $mapped rtcUsers}}
    <div>
      {{> rtcucard}}
    </div>
  {{/each}}
</template>

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

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

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

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

感谢指导!

【问题讨论】:

    标签: javascript mongodb meteor cursor snapshot


    【解决方案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,它本身就是反应性的。然后你正在调用一个游标,它也是反应式的。因此,根据具体情况,您可能会在反应性方面受到其中一种或另一种的影响。

    【讨论】:

    • 确实,他们都完成了一半的工作,这个组合对我来说应该是完美的。谢谢你哥们! :)
    猜你喜欢
    • 2013-05-16
    • 2021-12-05
    • 2021-07-03
    • 2017-03-24
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多