0

我有一个在我的流星应用程序中显示地图的模板。该模板用于两件事:

  • 在地图上显示我的应用程序的搜索结果
  • 一旦用户选择了一个特定场所,就显示一个特定场所的单独位置

目前我的代码如下(我没有关于这个模板的其他功能或助手):

Template.map.rendered = function() {
if(!map)
    var map = new Course_map('#map');

Deps.autorun(function(){

    if (Session.get("current_place")){
        var places = Places.find(Session.get("current_place")).fetch();
    }
    else{
        var places_cursor =  get_searched_places();
        if (places_cursor){
            var places = places_cursor[0].fetch();
            var places_id = _.pluck(places,'_id');

            //Remove the markers that are no longer in the places_id array
            map.remove_markers(places_id);
        }
    }

    if(places){
        // Add all the marker in places
        for(var i = 0, places_length = places.length; i < places_length; i ++){
            map.add_marker(places[i]);
        }
        // Recenter the map to focus on the marker area
        map.calc_bounds();
    }
});
};

我的地图模板:

<template name="map">
<div id="map" class='google-map'>
</div>

根据用户是否使用 Session.get("current_place") 我选择了一个地点,我在我的地点变量中加载了不同的信息。

我真的不喜欢那种设计,我想我可以找到一种更好的方法来做我想做的事情。你有什么建议吗 ?

4

1 回答 1

1

看起来您面临的问题之一是如何将 Meteor 与外部地图 API 集成。尽管强制执行此操作很诱人,但 Meteor 实际上提供了一种更简单的方法来处理该cursor#observeChanges()函数,您可以直接将其中的 、 和回调连接到地图addedAPI changedremoved

我实际上已经使用 Meteor 和 OpenLayers 实现了一个映射应用程序,它就是这样做的。向下滚动到最后:

https://github.com/mizzao/CrowdMapper/blob/master/client/views/map.coffee

于 2013-10-30T03:18:25.487 回答