2012-04-09 21 views
2

私は、私のサイトの地図のリーフレットを使っています。私はレイヤースイッチャーを動的に構築したいと思っています。コンストラクタはオブジェクトをとります。キーはマップ上に表示するレイヤの名前であり、値はレイヤオブジェクト自体です。私は、AJAXによって返された配列からスイッチャーを動的に構築しています。私が抱えている問題は、配列オブジェクトの値を新しいオブジェクトのキーにする方法を知らないということです。私のコードは次のようになります:JavaScriptオブジェクト拡張子

$.ajax ({ 
    url: '...', 
    data: { ... }, 
    dataType: 'json', 
    success: function (data) { 
     var overlayMaps = {}; 
     for (var i in data.elems) { 
      var layer = new Layer (...); 
      overlayMaps = $.extend ({}, overlayMaps, {data.elems[i].name : layer}); 
      map.addLayer (layer); 
     } 
     map.addControl (new L.Control.Layers (baseMaps, overlayMaps)); 
    } 
}); 

私の質問は9行目です。 data.elems[i].nameは働きたくありません。このエラーはmissing : after property idで、の後には.になります。何か案は?

+1

をあなたはそれが仕事をしたい "しないと言うとき、あなたは何を意味するのですか?それは価値がないのですか?デバッガのwatch listにdata.elems [i]を追加するとどうなりますか? –

+0

オブジェクトキーは**のみ**文字列にできます。文字列以外のものを渡すと、文字列に変換されます。 –

+0

私はこのエラー 'missing:after property id'を得て、' data'の後ろの '.'を指すことを意味します。それを含めて申し訳ありません。 – Nik

答えて

3

あなたはちょうどbracket notationを探していると思います。この代わりに:

overlayMaps = $.extend ({}, overlayMaps, {data.elems[i].name, layer}); 

あなたはこれ欲しい:

var opts = {}; 
opts[data.elems[i].name] = layer; 
overlayMaps = $.extend ({}, overlayMaps, opts); 
+0

完璧!ありがとうございました。 – Nik