2013-10-10 18 views
7

Sto usando ArcGIS 3.5 API JavaScript e RequireJSArcGis 3.5 questione con Requirejs

ho implementato utilizzando questo codice:

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

con questo RequireJS di configurazione:

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

e visualizza il seguente errore:

Ho questo errore

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

Qualcuno ha una spiegazione o un'idea su come risolverlo?

risposta

3

L'API di ArcGIS Javascript carica automaticamente il framework Dojo che definisce il proprio caricatore AMD. Qui, sta tentando di utilizzare il caricatore di RequireJs in quanto non sostituisce le funzioni se già esistono. Tuttavia, l'implementazione di Dojo ha alcuni metodi non standard collegati ad alcune delle sue funzioni (come 'ha' in questo esempio, penso che 'add' potrebbe essere un altro postato da qualcuno), che i moduli di dojo usano internamente. Ciò significa che, per funzionare, il dojo è attualmente tenuto a utilizzare il caricatore di Dojo. Come effetto collaterale di ciò, l'API di ArcGIS JS è attualmente incompatibile con RequireJs.

http://requirejs.org/docs/dojo.html ha un po 'di informazioni da RequireJs (anche se il ticket collegato è fuorviante in quanto essere "fisso" si riferisce a quel blocco di codice specifico e non al problema dell'intero framework).

Using requirejs with dojo 1.9.1 è un problema simile. Sembrano averlo risolto usando la versione di Dojo di Source/SDK, ma penso che questo sia impossibile quando si lavora con l'API di ArcGIS Javascript.

Questo dovrebbe risolversi con le versioni future di dojo/ArcGIS JS.