私はすでにマップAPIをプロジェクトに含めています。ここで、マップにいくつかのマーカーを表示したいと思います。スタートアップ関数でマップを初期化します。
Meteor.startup(function() {
...
var mapOptions = {
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
Map = new google.maps.Map(document.getElementById("map-canvas"),
mapOptions);
レンダリング時にマップの中心を設定するよりも
Template.mapPostsList.rendered = function() {
var p2 = Session.get('location');
Map.setCenter(new google.maps.LatLng(p2.lat, p2.lng));
var marker = new google.maps.Marker({
position: new google.maps.LatLng(p2.lat, p2.lng),
title:'Meine Position'
});
marker.setMap(Map);
今まではすべて正常に動作しています。私はいくつかの座標を含む PostCollection を持っていますが。パブリッシュおよびサブスクライブ機能があります。今、私は自分の投稿を地図上のマーカーで表示したいと考えています。
私の最初のアイデアは、レンダリングされた関数でこれを行うことでした。問題は、私の localcollection(clientside) に投稿が含まれていないため、初期ロード時に投稿が表示されないことです。投稿がサーバーから読み込まれるまで、しばらく時間がかかります。
それが、ヘルパー関数を構築しようとした理由です。投稿内の何かが変更されると、ヘルパーが自動的に再読み込みするためです。
Template.mapPostsList.helpers({
posts: function() {
var allPosts = Posts.find();
allPosts.foreach(function(post) {
create marker and attach it to the map
....
marker.setMap(Map);
})
問題は、私のマップ変数が定義されていないことです。グローバルスコープで定義する方法はありますか? レンダリングされた関数で Map 変数を使用できるのはなぜですか? ヘルパー関数でマーカーを挿入する私のアプローチが好きではないにもかかわらず、それは通常の方法ですか?
誰かが私の問題を解決する方法を教えてもらえますか?