我有以下模板:谷歌地圖被渲染兩次
<template name="test">
{{#isolate}}
<div id="map_canvas" style="width:50%; height:50%"></div>
{{/isolate}}
</template>
在我test.js(從https://developers.google.com/maps/documentation/javascript/tutorial#HelloWorld):
function initialize(){
var mapOptions = {
center: new google.maps.LatLng(-34.397, 150.644),
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map($("#map_canvas")[0], mapOptions);
}
Template.test.rendered = function(){
initialize();
//*** The following is the workaround I am using:***
// if (! this.initialized){
// initialize();
// this.initialized = true;
// }
};
的問題是:沒有變通辦法顯示在註釋代碼部分,模板總是呈現兩次(如初始化()運行)。它們都顯示在控制檯日誌中(日誌代碼未在此處顯示),也可以從地圖上看到閃爍一次(這是不可接受的)。
究其原因,我猜測,是從下列事件happending:
- 模板被渲染,以作爲一個簡單的div元素(沒有地圖附後)產生
$('#map_canvas')
; - 谷歌地圖api返回aync-ly並修改
$('#map_canvas')
; - 不知怎的,Meteor檢測到變化,並且儘管
{{#isolate}}
決定再次渲染整個模板(這在日誌中顯示); - initialize()再次被調用,在
Template.test.rendered
之內。
我的問題:
- 爲什麼呢?
- 如果這是發生了什麼,爲什麼流星只渲染兩次,而不是無限次?
- 解決方案?
3個問題和很多謝意!
你好,你是如何設法以正確的順序包含你的谷歌地圖API外部文件?我把它放在
但是當我呼籲它它抱怨它不存在.. –