2013-10-10 13 views
7

Ich ArcGIS 3.5 Javascript API und RequireJSArcGis 3.5 Ausgabe mit Requirejs

Ich setzte es mit diesem Code:

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

mit dieser RequireJS Konfiguration:

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: '_' 
     } 
    } 
}); 

und es zeigt der folgende Fehler:

Ich habe diesen Fehler

**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** 

Hat jemand eine Erklärung oder eine Idee, wie man es löst?

Antwort

3

Die ArcGIS Javascript-API lädt automatisch das Dojo-Framework, das den eigenen AMD-Loader definiert. Hier versucht es, Loader von RequireJs zu verwenden, da es die Funktionen nicht ersetzt, wenn sie bereits existieren. Die Dojo-Implementierung enthält jedoch einige nicht-standardmäßige Methoden, die an einige ihrer Funktionen angehängt sind (wie 'has' in diesem Beispiel, ich denke, 'add' könnte ein anderer sein, der gepostet wurde), die Dojo-Module intern verwenden. Das bedeutet, dass Dojo-Loader verwendet werden muss, damit Dojo funktionieren kann. Als Nebeneffekt ist ArcGIS JS API derzeit nicht mit RequireJs kompatibel.

http://requirejs.org/docs/dojo.html hat ein wenig Informationen von RequireJs (obwohl das verknüpfte Ticket irreführend ist, da es "behoben" auf diesen spezifischen Codeblock und nicht das gesamte Framework-Problem bezieht).

Using requirejs with dojo 1.9.1 ist ein ähnliches Problem. Sie scheinen es mit der Source/SDK-Version von Dojo gelöst zu haben, aber ich denke, das ist bei der Arbeit mit ArcGIS JavaScript API nicht möglich.

Dies sollte sich mit zukünftigen Dojo/ArcGIS JS-Versionen lösen.