Не удается получить доступ к карте Leaflet с помощью Backbone.js

При инициализации карты Leaflet с помощью Backbone.js я больше не могу получить доступ к этой точной карте.

E.g.:

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

приведет к

TypeError: 'undefined' не является функцией (оценка '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 прототип: Объект

Но почему я не могу получить доступ к этой карте после этого?

Спасибо!


person Severin    schedule 25.07.2013    source источник
comment
mapView.map.locate предполагает, что вы ожидаете найти переменную mapView, когда у вас есть только свойство mapView в одном из ваших представлений. И не $(this.$el), просто используйте this.$el; this.$ совпадает с this.$el.find.   -  person mu is too short    schedule 25.07.2013
comment
Спасибо ;) Я понимаю вашу точку зрения, но mapView и mapView - это две (ну, плохо названные, но тем не менее) переменные. Сам MapView имеет свойство с именем mapView, в маршрутизаторе (где мне нужно отобразить вид карты) var mapView инициализируется как var mapView = view.mapView.render(); - Прости...   -  person Severin    schedule 25.07.2013


Ответы (1)


Задача решена. Я просто переместил всю карту в вид и не разделял карту на другой вид. Это, вероятно, не лучший способ сделать это, но он делает свою работу довольно хорошо.

person Severin    schedule 06.08.2013