以下に示すように、Meteor.startupを使用してfind()が入力されるリストがあり<li>
ます。次に、data()を使用してこれらのすべてのデータ属性を取得し、<li>
それをオブジェクトに入れてreturn / console.logを実行しようとしているので、機能するかどうかを確認できます。しかし、私はnull
結果として得ています。
Meteor.startup(function () {
Template.messages.lists = function () {
var allitems = lists.find();
return allitems;
};
var map;
map = new GMaps({
div: '#map_canvas',
lat: -12.043333,
lng: -77.028333
});
var lat = map.getCenter().lat();
var lng = map.getCenter().lng();
map.addMarker({
lat: lat,
lng: lng,
draggable: true,
title: 'Test',
dragend: function (e) {
$('#lat').val(this.getPosition().lat());
$('#lng').val(this.getPosition().lng());
}
});
console.log(getMarkers());
});
function getMarkers() {
var coordinates = {};
coordinates = $('li.message').data();
return coordinates;
}
私は自分のコンソールで同じことを直接試しましたが、それは機能します-オブジェクトを取り戻します-したがって、この関数が実行される前にDOMの準備ができていない/入力されていないと推測しています。
Meteor.startupとTemplate.mytemplate.renderedのようなものの違いを理解するのに苦労しています。この場合、それらのどれも私が望むように機能しないようですか?
DOMで何かを行うための正しい方法/場所は何ですか(トラバース、属性の取得、操作)?
編集
やりたいことをするためにコードが大きく変わったので、全部投稿しました。
Meteor.startup(function () {
var map;
map = new GMaps({
div: '#map_canvas',
lat: 50.853642,
lng: 4.357452
});
Meteor.subscribe('AllMessages', function() {
var allitems = lists.find().fetch();
console.log(allitems);
allitems.forEach(function(item) {
var lat = item.location.lat;
var lng = item.location.lng;
console.log('latitude is: ' + lat);
console.log('longitude is: ' + lng);
map.addMarker({
lat: lat,
lng: lng,
draggable: true,
title: 'Test',
dragend: function(e) {
$('#lat').val(this.getPosition().lat());
$('#lng').val(this.getPosition().lng());
}
});
});
});
});
上記のコードは、Meteor.Startup内に(GMaps.jsプラグインを使用して)新しいGoogleマップを作成し、ネストされたサブスクライブでコレクションからすべてのドキュメントをフェッチし、結果を取得して緯度と経度の値を取得し、さらに追加しますグーグルマップのマーカー...
編集2
このようにして、「map」変数をグローバル変数にしたので、.subscribeと.startupをネストする必要はありません。:
Meteor.subscribe('AllMessages', function() {
var allitems = lists.find().fetch();
console.log(allitems);
allitems.forEach(function(item) {
var lat = item.location.lat;
var lng = item.location.lng;
console.log('latitude is: ' + lat);
console.log('longitude is: ' + lng);
map.addMarker({
lat: lat,
lng: lng,
draggable: true,
title: item.description,
dragend: function(e) {
$('#lat').val(this.getPosition().lat());
$('#lng').val(this.getPosition().lng());
}
});
});
});
Meteor.startup(function () {
map = new GMaps({
div: '#map_canvas',
lat: 50.853642,
lng: 4.357452
});
});
Template.messages.lists = function () {
var allitems = lists.find().fetch();
return allitems;
}