2016-03-17 24 views
5

Tôi biết đây là một câu hỏi phổ biến và tôi là một người mới, nhưng tôi hoàn toàn bối rối ngay cả sau khi tìm kiếm StackOverflow trong nhiều giờ.Thêm các thuộc tính cho các đối tượng toàn cầu

Tôi đang sử dụng API Google Maps và muốn theo dõi các điểm đánh dấu của mình bằng cách liên kết với ID. Vì vậy, tôi có var pinArray = new Object() như là một biến toàn cầu, và thêm đánh dấu như thế này:

function CreateMarkers (data){    
     data.forEach(function(store) {   
      <!-- CREATE MAP MARKER --> 
      var mapLat = store.latitude; 
      var mapLong = store.longitude; 
      var mapLatLng = { lat: parseFloat(mapLat), lng: parseFloat(mapLong) };      
      var marker = new google.maps.Marker({ 
       position: mapLatLng, 
       title: store.name,   
       icon: { 
        path: google.maps.SymbolPath.CIRCLE, 
        scale: 8.5, 
        fillColor: 'Green', 
        fillOpacity: 0.8, 
        strokeWeight: 0.6, 
       },    
       zIndex: 0 
      }); 
      cluster.addMarker(marker); 
      var key = store.Id; 
      pinArray['${key}'] = marker;       
     }) 
    } 

đâu clustervar cluster = new MarkerClusterer(map);.

Khi tôi cố gắng làm console.log(pinArray); trở lại bên ngoài chức năng, tôi nhận được một đối tượng trống: Object {}. Tôi đã cố gắng không sử dụng nội suy chuỗi là tốt, như pinArray[store.Id] = marker;, nhưng có cùng một vấn đề.

Tôi cần giữ liên kết toàn cầu này giữa các chân và ID vì tôi cần tham chiếu và cập nhật điểm đánh dấu bằng ID của chúng trong các chức năng khác. Hoặc ít nhất, tôi nghĩ rằng tôi làm, tôi mở cửa cho những cách khác để làm điều này. Trợ giúp được rất nhiều đánh giá cao; cảm ơn bạn trước.

+1

Chỉ cần FYI - '' là cú pháp cho nhận xét trong HTML - Nhận xét JavaScript là '// như thế này ' – tymeJV

+0

@tymeJV Oh, cảm ơn. Tôi muốn trở lại và thay đổi chúng. – Mason

Trả lời

2

Thông thường khi tôi đã thực hiện một cái gì đó như thế này trong quá khứ tôi sẽ sử dụng một mảng javascript tiêu chuẩn thay vì một đối tượng ID'd:

var pinArray = []; 

Sau đó sử dụng push để thêm dấu nó như bạn đi:

pinArray.push(Marker); 

Khi bạn tạo pin bạn có thể đưa chìa khóa của bạn trong định nghĩa tài sản của mình:

var marker = new google.maps.Marker({ 
      position: mapLatLng, 
      title: store.name,   
      icon: { 
       path: google.maps.SymbolPath.CIRCLE, 
       scale: 8.5, 
       fillColor: 'Green', 
       fillOpacity: 0.8, 
       strokeWeight: 0.6, 
      },    
      zIndex: 0, 
      key: store.Id 
     }); 

và bạn có thể viết một chức năng tra cứu vòng lặp đơn giản để tìm điểm đánh dấu bản đồ riêng lẻ nếu bạn cần kéo chúng bằng ID. Một cái gì đó như:

function GetMarkerByKey(key) { 
    var i = 0; 
    while (pinArray[i].key != key) {i++} 
    return pinArray[i]; 
} 

Ngoài ra, nếu bạn đang sử dụng nó trong trình xử lý sự kiện động để nhấp hoặc di chuột, bạn có thể sử dụng thuộc tính này để xác định điểm đánh dấu nào đang kích hoạt.

~~~ Edited để sửa chữa một lỗi cú pháp ~~~

+0

Đây là một ý tưởng hay, tôi không biết tôi có thể thêm bất kỳ thuộc tính nào tôi muốn vào điểm đánh dấu trên bản đồ. Tôi vẫn được sử dụng để gõ mạnh mẽ .NET! – Mason

+0

Nhân tiện, 'key = store.Id' phải là' key: store.Id'! – Mason

+0

Ah, tôi cũng là một nhà phát triển .NET. Tôi chỉ biết ý của bạn là gì. Javascript là một thế giới khác, nhưng bạn đã quen với nó sau một thời gian. Xin lỗi kịch bản của tôi không hoàn hảo, tôi đã không thực sự cố gắng chạy nó trong một trình duyệt, tôi chỉ cần gõ trực tiếp vào trường trả lời Stack Overflow haha. Tôi sẽ khá ngạc nhiên nếu chức năng tra cứu đó hoạt động ngay lập tức. – Jrud

2

var pinArray gán biến trong phạm vi chức năng nó được định nghĩa. Cách an toàn nhất để đảm bảo bạn đang xác định một biến là toàn cầu, bất kể bạn ở đâu bên trong một hàm, là gán nó cho window.

window.pinArray = new Object(); 
+0

IDK nếu đó là vấn đề của mình hay không, nhưng đó là một mẹo khá gọn gàng. +1 – Jrud

+0

Cảm ơn lời khuyên! Tôi nghĩ rằng tôi sẽ sử dụng phương pháp mảng tiêu chuẩn được liệt kê dưới đây, nhưng điều này là tuyệt vời để biết cho các biến thực sự toàn cầu. Cảm ơn! – Mason

Các vấn đề liên quan