Javascript - 在另一个函数中调用映射

标签 javascript jquery cordova

我正在为Android 创建一个phonegap 应用程序。我不太熟悉 Javascript,并且遇到过一种情况,我有两个函数,一个函数初始化一个名为“map”的 map ,另一个函数负责显示从 map 上的数据库加载的标记列表。

但是我的问题是如何将标记设置为显示在以不同函数启动的 map 上?

编辑 这是一些代码:

function map() { ... map = new google.maps.Map(document.getElementById("map"), mapOptions);<br/> ... }

function markers() { var MarkerType1 = new google.maps.MarkerImage("/android_asset/www/assets/markerType1.png", new google.maps.Size(29.0, 48.0), new google.maps.Point(0, 0), new google.maps.Point(14.0, 24.0) );

<p>var MarkerType2 = new google.maps.MarkerImage("/android_asset/www/assets/markerType2.png", new google.maps.Size(29.0, 48.0), new google.maps.Point(0, 0), new google.maps.Point(14.0, 24.0) ); </p> <p>var geocoder = new google.maps.Geocoder(); var eventList = $('ul#eventList').empty();</p> <pre><code>var eventPoints = $.ajax({ type: 'GET', url: 'http://www.somedomain.com/loadEvents.php?&jsoncallback=?', dataType: 'JSONp', timeout: 5000, success: function(data) { $.each(data, function(i,item){ if (item.EventType == 1) { new google.maps.Marker({ position: new google.maps.LatLng(item.latitude, item.longitude), map: this.map, icon: MarkerType1, draggable:false }); } else if (item.EventType == 2) { new google.maps.Marker({ position: new google.maps.LatLng(item.latitude, item.longitude), map: this.map, icon: MarkerType2, draggable:false }); } } } }); </code></pre>

}

最佳答案

这是一个变量范围的问题。确保变量 map 是在两个函数之外声明的。

例如。 :

$(function() {
    var map;//outer variable is accessible within both functions.

    function createMap() {
        map = new google.maps.Map({
            ...
        });
    }

    function createMarkers() {
        $.ajax({
            ...
            success: function(data) {
                $.each(data, function() {
                    var marker = new google.maps.Marker({
                        map: map,
                        ...
                    });
                });
            }
        });
    }

    createMap();
    createMarkers();

});

实际上,如果需要调用 map /标记创建代码来响应某些 future 事件,您只需将 map /标记创建代码放入函数中即可。

如果您想在页面加载时立即创建 map 及其标记,则可以按如下方式操作:

$(function() {
    var map = new google.maps.Map({
        ...
    });

    $.ajax({
        ...
        success: function(data) {
            $.each(data, function() {
                var marker = new google.maps.Marker({
                    map: map,
                    ...
                });
            });
        }
    });
});

关于Javascript - 在另一个函数中调用映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13993442/

相关文章:

javascript - 未定义的 JavaScript 对象构造函数

javascript - IE 7/8 中奇怪的 Javascript 怪癖

javascript - 如何在javascript中按两个名称对数组进行排序?

javascript - jQuery:将点击事件添加到特定的id

JQuery - 仅显示嵌套 div 中的一项

jquery - 如何在 Visual Studio 中通过 Nuget 获取最新的 jQuery 1.x?

javascript - 如何检查设备是在线还是离线 Phonegap

android - 如何将资源文件添加到我的 phonegap 项目

android phonegap 音频奇怪的问题

javascript - 如何从已连接的 Android 设备查看 Cordova 日志消息?