我试图在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);
为什么我无法为此函数添加参数?
答案 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。