Backbone.js集合中的传单标记?

Backbone.js集合中的传单标记?,backbone.js,leaflet,Backbone.js,Leaflet,我正在尝试基于backbone.js和传单构建一个应用程序。 用户可以拖动地图并查看地图上的标记。 可以通过单击标记来选择标记。选择后,他们必须更改图标和标记上显示的详细信息(不是弹出窗口) 我的主干模型由几个实体组成: 标记模型包含 经纬度 类型, 标题 当选 地图模型包含: 地图的中心, 标记收集, 选定标记 有人知道我怎样才能实现这种功能吗? 如何将传单标记作为主干视图?主干视图和传单对象模型并不完美,因为标记不包含在DOM元素中,而DOM元素正是主干.View.el应该表示的。标记确实当

我正在尝试基于backbone.js和传单构建一个应用程序。 用户可以拖动地图并查看地图上的标记。 可以通过单击标记来选择标记。选择后,他们必须更改图标和标记上显示的详细信息(不是弹出窗口)

我的主干模型由几个实体组成:

标记模型包含 经纬度 类型, 标题 当选

地图模型包含: 地图的中心, 标记收集, 选定标记

有人知道我怎样才能实现这种功能吗?
如何将传单标记作为主干视图?

主干视图和传单对象模型并不完美,因为标记不包含在DOM元素中,而DOM元素正是
主干.View.el
应该表示的。标记确实当然有一个元素(可通过
marker.\u icon
访问),但它在标记渲染到地图之前不存在

也就是说,可以用主干视图表示标记,但不能使用
事件或任何
el
相关功能。我已经使用OpenLayers成功地实现了类似的视图,它也有同样的“问题”,并且运行良好

我认为这是最容易用代码解释的:

//MarkerView has no element
App.Views.MarkerView = Backbone.View.extend({

    initialize: function(options) {
        //pass map instance to the marker
        this.map = options.map;
        //create the marker object
        this.marker = L.marker([this.model.get('longitude'), this.model.get('latitude')]);
    },

    render: function() {    
        //append marker to the map
        this.marker.addTo(this.map);

        //can't use events hash, because the events are bound
        //to the marker, not the element. It would be possible
        //to set the view's element to this.marker._icon after
        //adding it to the map, but it's a bit hacky.
        this.marker.on('click', this.onClick);
    },

    onClick: function() {
        alert("click");
    }
});

//MapView renders a map to the #map element
App.Views.MapView = Backbone.View.extend({
    id:"#map",
    render: function() {
        //render map element
        var map = this.map =  L.map(this.$el.attr('id'))
            .setView([this.model.get('centerLon'),  this.model.get('centerLat') ], 13)
            .addLayer(L.tileLayer(this.model.get('layerUrl'), { maxZoom: 18 }));

        //render each marker
        this.markerViews = this.model.get('markers').map(function(marker) {
            return new App.Views.MarkerView({model:marker, map:map}).render();
        });
    }
});

.

jshiddle现在可能已经停机了。为什么选择OpenLayers而不是传单?从你的回答来看,我想目前还没有像Backbone.js那样面向MVC的MapsAPIis@LaurynasMališauskas,通常是这样,但它会反弹回来。没有比我发布的内容更多的东西了,只有一个使用这些视图的演示。@LaurynasMališauskas我使用OpenLayers,因为我的需求比传单所能提供的要复杂一些。传单是轻量级的,非常适合简单的地图和功能,但对于某些类型的应用程序来说,它并不能满足需要。如果我所需要的只是渲染平铺地图服务和标记,我也会使用传单。我必须在App.Views.MapView中将id:#map”更改为id:“map”,才能让JSFIDLE正常工作。这是我的叉子:谢谢你的示例代码!