Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-在另一个函数中调用映射_Javascript_Jquery_Cordova - Fatal编程技术网

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

Javascript-在另一个函数中调用映射,javascript,jquery,cordova,Javascript,Jquery,Cordova,我正在为android创建一个phonegap应用程序。我对Javascript不太熟悉,遇到了一个场景,其中我有两个函数,一个用于初始化一个名为“map”的映射,另一个用于显示从映射上的数据库加载的标记列表 但是,我的问题是,如何设置标记以显示在以不同功能启动的地图上 编辑 下面是一些代码: 函数映射(){ ... map=new google.maps.map(document.getElementById(“map”),mapOptions); ... } 函数标记(){ var M

我正在为android创建一个phonegap应用程序。我对Javascript不太熟悉,遇到了一个场景,其中我有两个函数,一个用于初始化一个名为“map”的映射,另一个用于显示从映射上的数据库加载的标记列表

但是,我的问题是,如何设置标记以显示在以不同功能启动的地图上

编辑 下面是一些代码:

函数映射(){ ... map=new google.maps.map(document.getElementById(“map”),mapOptions);
... }


函数标记(){
var MarkerType1=new google.maps.MarkerImage(“/android_asset/www/assets/MarkerType1.png”,
新google.maps.Size(29.0,48.0),
新的google.maps.Point(0,0),
新google.maps.Point(14.0,24.0)
))

var MarkerType2=new google.maps.MarkerImage(“/android_asset/www/assets/MarkerType2.png”, 新google.maps.Size(29.0,48.0), 新的google.maps.Point(0,0), 新google.maps.Point(14.0,24.0) ))

var geocoder=new google.maps.geocoder(); var eventList=$('ul#eventList').empty()

}

有两种方法可以从我的头顶上解决这个问题。一种解决方案是沿着作用域链向上移动,直到标记作用域和映射作用域都是当前作用域的后代,然后实例化变量

   var map;
   var markers;
然后在这些函数中,将生成的对象绑定到这些变量。这样双方都可以通过这些变量访问另一方

另一种方法是使用观察者模式()在地图和标记准备就绪时发布它们,并在其中任何一个(如您认为合适的)中使用订阅者来监听另一个的准备就绪情况并捕获传递的对象


不同之处在于,方法1将地图和标记公开给所有其他子范围(可能不可取)。

有两种方法可以在我脑海中处理这个问题。一种解决方案是沿着作用域链向上移动,直到标记作用域和映射作用域都是当前作用域的后代,然后实例化变量

   var map;
   var markers;
然后在这些函数中,将生成的对象绑定到这些变量。这样双方都可以通过这些变量访问另一方

另一种方法是使用观察者模式()在地图和标记准备就绪时发布它们,并在其中任何一个(如您认为合适的)中使用订阅者来监听另一个的准备就绪情况并捕获传递的对象


不同之处在于方法1将映射和标记公开给所有其他子范围(可能不可取)。

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

例如:

实际上,如果需要调用映射/标记创建代码以响应未来的事件,则只需将其放入函数中

如果要在加载页面时立即创建地图及其标记,则可以按如下操作:

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

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

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

例如:

实际上,如果需要调用映射/标记创建代码以响应未来的事件,则只需将其放入函数中

如果要在加载页面时立即创建地图及其标记,则可以按如下操作:

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

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

这与我的设置有些相似。现在,当用户导航到该页面时,我正在调用createMap()函数。但是我该如何调用CreateMarkets呢?这是另一个作用域问题。函数受作用域约束的方式与其他变量/对象完全相同。由于两个函数,
createMap()
createMarkers()
,位于
$(function(){…})
结构中,因此它们只能在该结构中访问。在jQuery中,所有代码都在一个
$(function(){…})
结构中并不少见。请参阅上面答案中的其他文本。这与我的设置有些类似。现在,当用户导航到该页面时,我正在调用createMap()函数。但是我该如何调用CreateMarkets呢?这是另一个作用域问题。函数受作用域约束的方式与其他变量/对象完全相同。由于两个函数,
createMap()
createMarkers()
,位于
$(function(){…})
结构中,因此它们只能在该结构中访问。在jQuery中,所有代码都在一个
$(function(){…})
结构中并不少见。请参阅上面答案中的其他文本。