如何在Leaflet中添加.on(' ready')函数的参数?

时间:2014-06-01 18:35:04

标签: javascript leaflet

我试图在Leaflet中为杂食性图层添加弹出窗口。我将拥有很多这些图层,因此我想编写一个函数来为每个图层添加相同的样式和弹出窗口。每个图层都需要有自己的弹出文本。我写了这个函数,但是当我尝试运行代码时,我得到了#34; Uncaught TypeError:undefined不是函数"。

此代码不起作用:

function stylize(place) {
  this.setStyle({
    color: '#f00',
    opacity: 1
  });
  this.bindPopup(place);
  this.addTo(mapLayer);
};

omnivore.gpx('place-a.gpx')
.on('ready', stylize('Place A'));

这不会起作用:

omnivore.gpx('place-a.gpx')
.on('ready', function() {stylize('Place A');});

虽然这会:

function stylize() {
  this.setStyle({
    color: '#f00',
    opacity: 1
  });
  this.bindPopup('Place A');
  this.addTo(mapLayer);
};

omnivore.gpx('place-a.gpx')
.on('ready', stylize);

为什么我无法为此函数添加参数?

1 个答案:

答案 0 :(得分:2)

Javascript: how to pass parameters to callback function中介绍了如何将参数传递给回调函数。

但是,您还依赖this引用特定对象。因此,您必须使用.call明确设置this

omnivore.gpx('place-a.gpx').on('ready', function() {
  stylize.call(this, 'Place A');
});

要详细了解this,请查看MDN documentation