2013-07-25 36 views
0

當使用Backbone.js初始化傳單地圖時,我無法再訪問此確切地圖。使用Backbone.js無法訪問傳單地圖

例如:

mapView.map.locate({setView: true, maxZoom: 10}); 

將導致

TypeError: 'undefined' is not a function (evaluating 'mapView.map.locate({setView: true, maxZoom: 10})')

該地圖在像儀表板視圖經由單獨的視圖初始化:

this.mapView = new MapView(); 
    $(this.$el).find('.content').append(this.mapView.el).find('.map').addClass('full').css({ 
     'height': $(window).height()/2 
    }); 

此視圖看起來像:

var MapView = Backbone.View.extend({ 
    template: _.template(""), 
    render: function() 
    { 
     this.$el.html(this.template()); 

     this.map = L.map(this.el).setView([48.00786, 13.17989], 8); 

     this.map = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 
      attribution: 'OpenStreetMap &copy; Mitwirkende der <a href="http://osm.org/copyright">OpenStreetMap</a>' 
     }).addTo(this.map); 

     return this; 
    } 
}); 

我可以通過console.log來訪問地圖對象。結果如下:

_animated: true _bgBuffer: HTMLDivElement _clearBgBufferTimer: 4 _container: HTMLDivElement _initHooksCalled: true _leaflet_events: Object _leaflet_id: 20 _limitedUpdate: function s() {var a=arguments;return n?(o=!0,void 0):(n=!0,setTimeout(function(){n=!1,o&&(s.apply(i,a),o=!1)},e),t.apply(i,a),void 0);} _map: Object _tileContainer: HTMLDivElement _tileImg: HTMLImageElement _tiles: Object _tilesToLoad: 0 _url: "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" options: Object proto: Object

但是爲什麼我以後無法訪問此地圖?

謝謝!

+0

'mapView.map.locate'會暗示您希望在您的某個視圖中只有一個'mapView'屬性時找到一個'mapView'變量。不要'$(this。$ el)',只需使用'this。$ el'; ['this。$'](http://backbonejs.org/#View-dollar)與'this. $ el.find'相同。 –

+0

謝謝;)我明白了你的觀點,但是mapView和mapView是兩個(好的,嚴重命名但是無論如何)變量。 MapView本身在路由器(我需要渲染地圖視圖)中有一個屬性valled mapView,var mapView被初始化爲var mapView = view.mapView.render(); - 抱歉... – Severin

回答

0

問題解決了。我只是將整個地圖移動到視圖中,並沒有將地圖分離到另一個視圖中。這可能不是實現這一目標的最好方式,但它確實很好。