循环绑定对象

Loop bind objects

本文关键字:对象 绑定 循环      更新时间:2023-09-26

我已经阅读了这个答案,但仍然对使代码工作感到头疼。

我的需求略有不同。我必须绑定每个对象,而不是警报。我的代码是:

for (var i = 0; i < markers_length; i++) {
    events_number = data.markers[i].events_number //data.markers is a multidimentional array
    marker = L.marker([ data.markers[i].latitude , data.markers[i].longitude ]); //just create the new object
    marker.on('mouseover', function(){
        return function(){
            this.bindPopup(" Found"+events_number+" event(s)").openPopup();
        }
    }(i) );
}

如果你问,我正在使用传单。对于单个对象,bindPopup 的工作方式如下:

marker.on('mouseover', this.bindPopup('hi').openPopup());

麻烦的是上面的代码给出了所有对象的最后一个对象。我假设this和功能级别存在问题。那么如何用单独的文本绑定每个标记呢?

应该是:

marker.on('mouseover', function(en){
    return function(){
        this.bindPopup(" Found"+en+" event(s)").openPopup();
    }
}(events_number) );

您必须传递要保存在闭包中的值(在本例中为events_number),并且该函数必须接受一个参数来接收该值并在闭包中使用它(在我的代码中en)。