0

我是 javascript 新手,想了解我的代码发生了什么。我正在使用 jQuery 和OpenLayers来做一些网络映射。

这是代码示例 1,其中我的 map 变量是在 onReady 函数中创建的:

$(document).ready(function(){
    var map = new.OpenLayers.Map('map', options);
    $.get(my_python.cgi_script which returns an html table of available layers)
    });

据我了解,我的“地图”变量具有本地范围。

在该函数中,我添加了一些图层、生成控件等。所有这些都在 OpenLayers 文档中工作和介绍。我还使用 jQuery 的 get 方法来调用一个 python.cgi 脚本,该脚本动态生成一个可用层表。这一切都发生在上面的 onReady 中。

我需要处理动态生成的内容,发现我需要将代码放入 onLoad 函数中。如果我将第二个代码块放入 onReady 函数中,则无法通过 jQuery 访问缩略图,因为呈现事物的顺序。

$(document).ready(function(){
    var map = new.OpenLayers.Map('map', options);
    //More code to dynamically generate a list of available layers, stored in a table
    $.get(my_python.cgi_script which returns an html table of available layers)
    });

$(body).onLoad(function(){
 $(img.thumbnail).bind('click', function(){
  var name = $(this).attr('layer_name_id')
  var layer = new OpenLayers.WMS(//all the stuff to add the layer, including name)
  map.addLayer('layer') //map undefined due to scope
});
});

在上面的块中,'map' 在第二个变量中是未定义的。我理解为什么(范围)并决定 map 需要是一个全局变量。然后我尝试了:

var map; //This is a global because it is defined outside of any functions?
$(document).ready(function(){
    map = new.OpenLayers.Map('map', options);
    //More code to dynamically generate a list of available layers, stored in a table
    $.get(my_python.cgi_script which returns an html table of available layers)
    });

$(body).onLoad(function(){
 $(img.thumbnail).bind('click', function(){
  var name = $(this).attr('layer_name_id')
  var layer = new OpenLayers.WMS(//all the stuff to add the layer, including name)
  map.addLayer('layer')
});
});

地图变量仍未定义。为什么?我是否误解了全球的运作方式?

通过将 onLoad 函数放在 onReady 代码块中,我能够让一切正常工作。我不知道为什么下面的工作:

$(document).onReady(function(){
    var map = new.OpenLayers.Map('map', options);
    //More code to dynamically generate a list of available layers, stored in a table
    $.get(my_python.cgi_script which returns an html table of available layers)

$(body).onLoad(function(){
 $(img.thumbnail).bind('click', function(){
  var name = $(this).attr('layer_name_id')
  var layer = new OpenLayers.WMS(//all the stuff to add the layer, including name)
  map.addLayer('layer')
  });
});   

});

4

1 回答 1

0

您声明全局变量映射的代码片段正在工作。但是Jquery 没有onReady 和onLoad 方法。更好地创建将在 $(document).ready() 函数中执行的 init() 函数,不要混合 $(document).ready 和 body.onload 函数。使用 init 函数和它 document.ready 事件。

于 2012-04-20T13:16:33.170 回答