2013-10-10 2 views
7

Я использую ArcGIS 3.5 Javascript API и RequireJSArcGis 3.5 выпуск с Requirejs

Я реализовал его, используя этот код:

<script> 
    var map; 
    require(["esri/map", "dojo/domReady!"], function(Map) { 
    map = new Map("mapDiv", { 
     center: [-96.571541, 39.155622], 
     zoom: 3, 
     basemap: "streets" 
    }); 
    }); 
    }); 
</script> 

с этим RequireJS конфигурации:

requirejs.config({ 
    baseUrl: "js/", 
    paths: { 
     underscore: 'libs/underscore', 
     tpl: 'tpl', 
     backbone: 'libs/backbone', 
     text: 'libs/text', 
     domReady: 'libs/domReady' 
    }, 
    packages: [ 
       { 
        name: 'dojo', 
        location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.5compact/js/dojo/dojo/" 
       }, 
       { 
        name: 'dojox', 
        location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.5compact/js/dojo/dojox" 
       }, 
       { 
        name: 'dijit', 
        location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.5compact/js/dojo/dijit" 
       }, 
       { 
        name: 'esri', 
        location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.5compact/js/esri" 
       } 
      ], 
    shim: { 
     'backbone': { 
      //These script dependencies should be loaded before loading backbone.js 
      deps: ['underscore'], 
      //Once loaded, use the global 'Backbone' as the module value. 
      exports: 'Backbone' 
     }, 
     'underscore': { 
      exports: '_' 
     } 
    } 
}); 

и отображает следующая ошибка:

У меня есть эта ошибка

**Uncaught TypeError: Object function(){} has no method 'add' has.js:8 

Uncaught Error: Load timeout for modules: dojo/domReady!_unnormalized2,dojo/has!dom-addeventlistener?:./aspect_unnormalized3,dojo/i18n!dojo/cldr/nls/number_unnormalized4,dojo/i18n!dojo/cldr/nls/gregorian_unnormalized5,dojo/i18n!esri/nls/jsapi_unnormalized6,dojox/gfx/renderer!_unnormalized7,dojo/selector/_loader!default_unnormalized8,dojo/has!host-browser?dom-addeventlistener?:../on:_unnormalized9** 

У кого-нибудь есть объяснение или идея о том, как его решить?

ответ

3

API-интерфейс ArcGIS Javascript автоматически загружает инфраструктуру Dojo, которая определяет ее собственный загрузчик AMD. Здесь он пытается использовать загрузчик RequireJs, поскольку он не заменяет функции, если они уже существуют. Тем не менее, реализация Dojo имеет несколько нестандартных методов, связанных с некоторыми из ее функций (например, «has» в этом примере, я думаю, что «add» может быть другим опубликованным человеком), которые модули dojo используются внутри. Это означает, что для dojo для работы вам в настоящее время требуется использовать загрузчик Dojo. Как побочный эффект этого, API-интерфейс ArcGIS JS API в настоящее время несовместим с RequireJs.

http://requirejs.org/docs/dojo.html имеет немного информации от RequireJs (хотя связанный билет вводит в заблуждение, поскольку он является «фиксированным» относится к этому конкретному коду блока, а не к общей проблеме).

Using requirejs with dojo 1.9.1 - аналогичная проблема. Кажется, они решили это, используя версию Dojo Source/SDK, но я думаю, что это невозможно при работе с API-интерфейсом ArcGIS Javascript.

Это должно разрешить себя с будущими релизами dojo/ArcGIS JS.

Смежные вопросы