我是否可以仅确定Meteor中订阅中的哪些数据已更改?

时间:2013-10-25 21:42:15

标签: meteor

所以我有一个充满GPS坐标的流星集合,我在地图上绘制。我的Meteor集合中的任何时候数据都发生了变化,我有一个deps.autorun,它清除了我订阅中没有的所有标记。然后我绘制所有尚未绘制的标记。如果我有一堆数据快速更新,我的iPhone上的浏览器崩溃了。因此,我希望能够仅针对已更改的内容更新地图,而不是每次扫描并查找已更改的内容以减轻负载。这可能吗?

由于

1 个答案:

答案 0 :(得分:2)

@ user728291是正确的,observeChangesobserve仅用于此类情况。

您要做的是按ID跟踪所有新对象:

Template.map.rendered = function () {
  Places.find().observe({
    added: function (doc) {
      // code to add pin of doc
    },
    changed: function (newDoc, oldDoc) {
      // code to move pin from oldDoc position to newDoc
    },
    removed: function (doc) {
      // code to remove a pin associated with doc
    }
  });
}

实际上,只要将{{#each things}}...{{/each}}模板助手与作为MongoDB游标返回的数据合并:

Template.myTemplate.things = function () {
  return Things.find({ rating: { $gt: 3 } });
}
流星将在引擎盖下做同样的事情。 UI系统将观察光标上的变化,而不是重绘所有内容,它将找出更改的内容并仅更新显示列表的相关部分。