2015-06-16 35 views
0

我正在使用'arcgis'API加載地圖的php應用程序。請看下面的網址:dojo.require聲明未按預期加載esri地圖模塊

http://js.arcgis.com/3.11/ 

爲了加載在我的應用程序的ArcGIS地圖,我必須用

dojo.require("esri.map"); 

所以在我的單頁PHP應用程序添加此如下要求聲明:

<script type="text/javascript"> 
    dojo.require("esri.map"); 
</script> 

而且在我給地圖一個js文件被加載,如下圖所示:

var myOptions = { 
         maxZoom: 20, 
         minZoom: 3, 
         zoom:5, 
         isZoomSlider: false, 
         sliderStyle: "large", 
         sliderPosition: "top-right"    
        }; 
     this.map = new esri.Map("mapDiv", myOptions); 

但是,當我運行這個應用程序時,我得到一個錯誤,在「this.map = new esri.Map(」mapDiv「,myOptions);行」Uncaught TypeError:undefined不是函數「

如果我打開開發人員工具,通過在require和esri.Map語句中保留斷點來運行相同的代碼,我可以看到地圖正在加載。但是如果我沒有打開開發者工具就運行它,那麼我就面臨這個問題。

爲什麼dojo.require語句沒有按預期工作? 我在做什麼錯? 請回復

回答

0

您正嘗試使用傳統模塊要求加載地圖模塊。嘗試需要地圖採用AMD語法如圖docsrequire(["esri/map"], function(Map) { /* code goes here */ });

+0

我已經嘗試過在我的應用程序too.But,我必須初始化地圖別的地方,而不是在初始化它需要的功能原因是我的應用程序正在使用Backbone.js,我無法直接在視圖中包含此代碼。所以我做了下面的 在一個視圖中,我使用了下面的代碼: this.map = new mapAssign(「mapDiv」,myOptions); 在這樣做的時候,我得到了同樣的問題,因爲require函數並沒有首先擊中。相反,Map初始化首先被擊中。 –

+0

我製作了一個[sample](http://jsfiddle.net/C9wew/7197/),可以查看骨幹視圖和esri地圖。我會建議您瞭解更多關於AMD的信息[https://developers.arcgis.com/javascript/jshelp/inside_dojo_amd.html] – mchepurnoy

0

您需要在通話中來包裝你的JavaScript代碼來dojo.ready

HTML文件:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"> 
    <title>JavaScript in Separate File</title> 

    <link rel="stylesheet" href="http://js.arcgis.com/3.11/dijit/themes/claro/claro.css"> 
    <link rel="stylesheet" href="http://js.arcgis.com/3.11/esri/css/esri.css"> 
    <style> 
     html, body { height: 100%; width: 100%; margin: 0; padding: 0; } 
     #mapDiv{padding:0;} 
    </style> 

    <script>var dojoConfig = {parseOnLoad: true};</script> 
    <script src="//js.arcgis.com/3.11/"></script> 
    <script src="code.js"></script> 
    <script> 
     dojo.require("esri.map"); 
     dojo.require("esri.layers.agstiled"); 
    </script> 
    </head> 
    <body class="claro" > 
    <div id="mapDiv"></div> 
    </body> 
</html> 

code.js文件:

dojo.ready(function() { 
    var myOptions = { 
        maxZoom: 20, 
        minZoom: 3, 
        zoom:5, 
        isZoomSlider: false, 
        sliderStyle: "large", 
        sliderPosition: "top-right"    
       }; 
    this.map = new esri.Map("mapDiv", myOptions); 
    var layer = new esri.layers.ArcGISTiledMapServiceLayer(
    "http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"); 
    this.map.addLayer(layer); 
});