我正在玩流星,並且在嘗試圍繞幾個概念包裹頭部時遇到了問題。我正在處理的問題之一是我正在嘗試使用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.forEach
與Deps.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解析集合的正確方法是什麼?本地收藏最初然後只獲得添加到集合中的新值,而不是再次整個事物。
謝謝。我在看,但不是100%肯定這是正確的路線。但是,每當'.observeChanges'執行它時,我做了一些更改,說'排隊任務中的異常:TypeError:無法讀取'undefined'的屬性'Latitude'。它寫了24次,集合中有24個項目,這是個好消息。我只需要弄清爲什麼'doc'是未定義的。 – Captainslow 2014-09-04 20:50:18
對不起,我認爲它應該是'觀察',而不是'observeChanges'。無論出於何種原因,'observeChanges'的'added'回調函數只發送一個'_id'(一個字符串,所以當然沒有Geolocation屬性),'observe'的'added'回調函數被髮送給文檔對象。見http://docs.meteor.com/#observe – 2014-09-04 20:57:06
非常感謝Geoffrey Booth。這正是我所期待的。 – Captainslow 2014-09-05 22:13:04