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