我想在Google Maps API驱动的地图上显示尚未被特定人员访问的路标。
我目前在MongoDB中有两个集合。
我想要的是:
我对Meteor来说还是一个新手,虽然我认为我理解一个订阅(甚至是同一个系列的多个订阅),但我很难找到一个没有反应的解决方案。涉及将大量数据注入浏览器。
我在弄清楚如何将其组合成简单的东西时遇到了问题。我担心没有办法,但选择的链接会有所帮助。
答案 0 :(得分:0)
当你描述声音可行时。首先看一下understanding Meteor publish/subscribe,然后重新审视问题。
我构建出版物的方式如下:
// server - takes care of requirements 1, 3 and 5
Meteor.publish('waypoints-within-bounds', function publishFunction(bounds) {
return Waypoints.find({
location: {
$geoWithin: {
$box: [ bounds.bottomLeft, bounds.upperRight ]
}
},
guid: {
$nin: // array of visited waypoint guids; Mongo doesn't have joins
}
});
});
// client - this takes care of requirement #2
Tracker.autorun(function () {
Meteor.subscribe('waypoints-within-bounds', Session.get('mapBounds'));
});
function updateMapBounds() {
var bounds = map.mapObject.getBounds();
// massage developers.google.com/maps/documentation/javascript/reference#LatLngBounds
// to match MongoDB's $box parameter order: [...]
Session.set('mapBounds', bounds);
}
google.maps.event.addListener(map.mapObject, 'center_changed', updateMapBounds);
google.maps.event.addListener(map.mapObject, 'zoom_changed', updateMapBounds);
以上是对Google Maps API的原始调用,但您可能希望使用dburles:google-maps。
现在我们需要处理最后一个要求:"如果该玩家随后访问该航路点,则将相关记录添加到访问数据库将导致航点从地图中消失。"使用Meteor.method做得最好,当您访问航点时,您将从客户端拨打电话。
展望未来,您可能希望改为使用template-level subscriptions和keep an eye on this feature making it into Meteor core。