2012-04-09 5 views
2

내 사이트의지도를 보려면 리플릿을 사용하고 있습니다. 동적으로 레이어 스위처를 만들고 싶습니다. 생성자는 객체를 취하며, 키는지도에 표시 할 레이어의 이름이고 값은 레이어 객체 자체입니다. 나는 AJAX가 반환 한 배열로부터 스위처를 동적으로 구현하고있다. 문제는 배열 객체의 값을 새 객체의 키로 가져 오는 방법을 모르겠다는 것입니다. 내 코드는 다음과 같습니다 :자바 스크립트 개체 확장명

$.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

당신은 무엇을 의미합니까 :

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

당신이 원하는 대신이의? 그게 가치가 없거나 무엇을 의미합니까? 디버거의 watch list에 data.elems [i]를 추가하면 어떻게 될까요? –

+0

개체 키는 ** 문자열 ** 일 수 있습니다 **. 문자열이 아닌 다른 값을 전달하면 문자열로 강제 변환됩니다. –

+0

나는이 오류'missing : after property id'를 얻었고,'data' 다음에'.'를 바로 가리키고 있음을 의미합니다. 죄송합니다. – Nik

답변

3

나는 단지 bracket notation을 찾고 있다고 생각합니다. 당신이 '일하고 싶어'하지 않는 말할 때

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

완벽한! 고맙습니다. – Nik

관련 문제