0

BingマップをjQueryMobileフレームワーク内に統合しているコードがあります。各マーカー内に表示されるテキストがなければ、うまく機能しています。

マーカーは正しい場所に表示されますが、テキストは最後に生成されたマーカーの1つに変更されているようです

これは私のコードです

for (var i = 0; i < locations.length; i++)
{
  marker_description = locations[i].description;
      marker_title = locations[i].title;
  var self = this;


  self.addMarker({'location': locations[i].lat +','+locations[i].long, 'bounds' : true })
  .click(function() {
      self.openInfoWindow({
        'title': marker_title,
        'description': marker_description
      }, this);
  });
}

したがって、問題は、各マーカーをクリックすると、開くポップアップにループの最後の項目の値が表示されていることです。

4

1 に答える 1

2

定義したコールバックが呼び出されるまでに、変数は変更されています。

このようにすぐに実行されるクロージャでそれらを保護することができます:

for (var i = 0; i < locations.length; i++) {
   (function(i){
      var marker_description = locations[i].description; // be careful to use local variables
      var marker_title = locations[i].title;
      var self = this;
      self.addMarker({'location': locations[i].lat +','+locations[i].long, 'bounds' : true })
      .click(function() {
          self.openInfoWindow({
            'title': marker_title,
            'description': marker_description
          }, this);
      });
  })(i);
}

var変数をローカルにするために追加したことに注意してください。

于 2013-02-21T16:59:39.467 に答える