2013-11-04 34 views
1

我無法通過Backbone.js渲染谷歌地圖(V3)。簡單的Backbone.js和谷歌地圖渲染

導航到地圖視圖(/#/ map)時無法加載;不過,當我在該地圖視圖網址中刷新刷新時,地圖以某種方式加載完全正常。

相關的代碼下面:


<body> 
    <a href="#">Home</a> 
    <div id="content"></div> 


    <script type="text/template" id="home_template"> 
     <a href="#/map">Go !</a> 
    </script> 

    <script type="text/template" id="map_template"> 
     <div id="map"></div> 
    </script> 
</body> 

var MapView = Backbone.View.extend({ 
    el: '#content', 

    render: function() { 
     var template = _.template($('#map_template').html()); 
     var init = function() { 
      var mapOptions = { 
       center: new google.maps.LatLng(-34.397, 150.644), 
       zoom: 8, 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      }; 
      var map = new google.maps.Map(document.getElementById("map"), 
      mapOptions); 
     } 
     google.maps.event.addDomListener(window, 'load', init); 
     this.$el.html(template); 
    } 
}); 

var Router = Backbone.Router.extend({ 
    routes: { 
     ""  : "home", 
     "map" : "map" 
    } 
}); 
var router = new Router; 

var homeView = new HomeView(); 
router.on('route:home', function() { 
    homeView.render(); 
}); 

var mapView = new MapView(); 
router.on('route:map', function() { 
    mapView.render(); 
}); 

Backbone.history.start(); 

看來這 '東西' 是缺少家庭之間,當我切換視圖地圖,但我'我不確定那是什麼東西。我相信我已經梳理了相關的問題,但找不到缺點。

任何幫助將不勝感激。

謝謝!

(PS的MapView部分摘自:https://developers.google.com/maps/documentation/javascript/tutorial

+0

在導航到「mapView」時是否刪除了「#content」? – fbynite

+0

你可以發佈你的HomeView嗎?你有沒有任何自定義的清理代碼可以調用它?$ el.remove或類似的東西? – Mingle

回答

0

問題是在這裏我想

google.maps.event.addDomListener(window, 'load', init); 

你正在呼籲window.load init,但是當你視圖之間切換,它會不刷新頁面,並且window.load永遠不會被觸發。我想你需要改變init的發生方式,如果我有更多關於頁面DOM結構的信息,我可以更好地提出建議。

+0

這是事實,這正是問題所在。 – otmezger