2014-09-04 103 views
1

我正在玩流星,並且在嘗試圍繞幾個概念包裹頭部時遇到了問題。我正在處理的問題之一是我正在嘗試使用Google和Meteor構建動態熱圖。我有一個外部的Meteor Mongo數據庫(即不是Meteor規定的本地MongoDB),並且位於數據庫中,我有一個包含許多文檔的集合,每個文檔都有一個緯度值和一個經度值。流星並用數值填充數組

我現在遇到的問題是,當我嘗試解析我的集合中find()的結果集時,它沒有被填充,因此我的熱圖值沒有被繪製到屏幕上。但是,當我在控制檯上運行相同的命令時,我可以得到結果。我認爲代碼和數據回收在同一時間運行,其中一個正在跳出另一個。

//Global scope 
DestinationCollection = new Meteor.Collection("Destinations"); 
destinations = DestinationCollection.find(); 

if (Meteor.isClient) { 

    Template.searchMap.rendered = function() { 

     var airportData = []; 
     var mapOptions = { 
      zoom: 3, 
      center: new google.maps.LatLng(45.4158, -89.2673), 
      mapTypeId: google.maps.MapTypeId.HYBRID, 
      mapTypeControl: false, 
      panControl: false, 
      streetViewControl: false 
     }; 

     var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
     var airportArray = new google.maps.MVCArray([]); 

     destinations.forEach(function(destination){ 
      airportArray.push(new google.maps.LatLng(destination.Geolocation.Latitude, destination.Geolocation.Longitude)); 
     }); 

     var heatmap = new google.maps.visualization.HeatmapLayer({ 
      data: airportArray, 
      radius: 20 
     }); 
     heatmap.setMap(map); 
    }; 
} 

唯一的解決方案,我想出來的是包裹destinations.forEachDeps.autorun

Deps.autorun(function(){ 
    destinations.forEach(function(destination) { 
     airportArray.push(new google.maps.LatLng(destination.Geolocation.Latitude, destination.Geolocation.Longitude)); 
     }); 
}); 

這工作,但每當我用1添加新文檔到集合中的計數雙打和增加例如,如果我有10個項目,並且我爲該集合添加了1個項目,則MVCArray將具有21個陣列元素,而不僅僅是11個。

長話短說,通過a解析集合的正確方法是什麼?本地收藏最初然後只獲得添加到集合中的新值,而不是再次整個事物。

回答

1

查找到observeobserveChangesdocs),而不是Deps.autorun

destinations.observe({ 
    added: function (doc) { 
    airportArray.push(new google.maps.LatLng(doc.Geolocation.Latitude, 
     doc.Geolocation.Longitude)); 
    // Add code to refresh heat map with the updated airportArray 
    } 
}); 
+0

謝謝。我在看,但不是100%肯定這是正確的路線。但是,每當'.observeChanges'執行它時,我做了一些更改,說'排隊任務中的​​異常:TypeError:無法讀取'undefined'的屬性'Latitude'。它寫了24次,集合中有24個項目,這是個好消息。我只需要弄清爲什麼'doc'是未定義的。 – Captainslow 2014-09-04 20:50:18

+0

對不起,我認爲它應該是'觀察',而不是'observeChanges'。無論出於何種原因,'observeChanges'的'added'回調函數只發送一個'_id'(一個字符串,所以當然沒有Geolocation屬性),'observe'的'added'回調函數被髮送給文檔對象。見http://docs.meteor.com/#observe – 2014-09-04 20:57:06

+0

非常感謝Geoffrey Booth。這正是我所期待的。 – Captainslow 2014-09-05 22:13:04