所以我有一个满是 GPS 坐标的流星集合,我在地图上绘制了这些坐标。每当我的 Meteor 集合中的数据发生变化时,我都有一个 deps.autorun 来清除所有不在我订阅中的标记。然后我绘制所有尚未绘制的标记。如果我有一堆快速更新的数据,我 iPhone 上的浏览器就会崩溃。因此,我希望能够仅针对已更改的内容更新地图,而不是每次都扫描并查找已更改的内容以减轻负载。这可能吗?
谢谢
所以我有一个满是 GPS 坐标的流星集合,我在地图上绘制了这些坐标。每当我的 Meteor 集合中的数据发生变化时,我都有一个 deps.autorun 来清除所有不在我订阅中的标记。然后我绘制所有尚未绘制的标记。如果我有一堆快速更新的数据,我 iPhone 上的浏览器就会崩溃。因此,我希望能够仅针对已更改的内容更新地图,而不是每次都扫描并查找已更改的内容以减轻负载。这可能吗?
谢谢
@user728291 是对的,在这种情况下使用observeChanges或只是观察。
您要做的是按 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 } });
}
Meteor 会在引擎盖下做同样的事情。UI 系统将观察光标上的变化,而不是重绘所有内容,它会找出发生了什么变化并仅更新显示列表的相关部分。