2

我试图在 Backbone 应用程序中使用 Leaflet。加上它的 AMD 要求 - 所以它不是页面中的脚本......我相信问题是它无法访问页面 DOM。

L.Map 接受一个字符串。不是 DOM...

这是一些代码。我什至尝试延迟几秒钟直到页面呈现。没有成功。

错误是“找不到地图容器”

   define([
      'jquery',
      'underscore',
      'backbone',
      'collections/Collection',
      'text!templates/map/Template.html',
      'libs/leaflet-markercluster/leaflet-0.6.4'
   ], function($, _, Backbone, Collection, Template, L) {
       var MapView = Backbone.View.extend({
          el : "#sub-page",
          template: _.template(Template),
          delayedRender: function() {
              try {
                  var map = this.map = new L.Map( '#map_canvas' );   
              } catch ( err ) {
                  console.log(err);
              }   
          },

          render : function() {
              this.$el.html( this.template() ); 
              setTimeout( this.delayedRender, 2 );         
          }

深入挖掘 Leaflet L.Map 构造函数会执行 document.getElementById,这在 AMD 主干应用程序中可能没有意义。

 return (typeof id === 'string' ? document.getElementById(id) : id);
4

1 回答 1

8

你可能早就解决了这个问题或继续前进,但我遇到了同样的问题。对我来说,解决方案与 Backbone 无关。相反,对 L.map(...) 的调用似乎是在 DOM 准备好之前运行的。

为了解决这个问题,我只是将 L.map 包装在一个标准的 jQuery document.ready 中,一切都很好。

于 2014-04-10T04:13:18.150 回答