ArcGIS API for JavaScript 入門教程[4] 代碼的骨架


 

【回顧與本篇預覽】

上篇簡單介紹了JsAPI中的數據與視圖,並告訴大家這兩部分有什么用、如何有機連接在一起。

這一篇快速介紹一下前端代碼的骨架。當然,假定你已經熟悉HTML5、CSS3和JavaScript(最好了解一下ES6)

轉載請注明出處,博客園/CSDN/bilibili:秋意正寒

目錄:https://www.cnblogs.com/onsummer/p/9080204.html

1. 代碼

為了方便演示,我將js代碼和css代碼全都寫在一個html文件里,當然,更合適的做法是三者分離,不過要注意引用的順序哦。

使用上篇三維視圖的代碼↓

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
  <title>Intro to SceneView - Create a 3D map - 4.7</title>
  <style>
    html,
    body,
    #viewDiv {
      padding: 0;
      margin: 0;
      height: 100%;
      width: 100%;
    }
  </style>

  <link rel="stylesheet" href="https://js.arcgis.com/4.7/esri/css/main.css">
  <script src="https://js.arcgis.com/4.7/"></script>

  <script>
    require([
      "esri/Map",
      "esri/views/SceneView",
      "dojo/domReady!"
    ], function(Map, SceneView) {

      var map = new Map({
        basemap: "streets",
        ground: "world-elevation"
      });

      var view = new SceneView({
        container: "viewDiv",
        map: map,
        scale: 50000000,
        center: [-101.17, 21.78]
      });

    });
  </script>
</head>

<body>
  <div id="viewDiv"></div>
</body>
</html>
三維視圖代碼

2. HTML組成/CSS簡單解釋

先把標簽都折疊,過一下HTML的組成。

什么?你說你不喜歡看代碼?那怎么行,得培養梳理代碼的能力。我在這繼續用圖解法,剖析頁面結構:

其中,第二個script標簽是我們自己的代碼。

link標簽用於引用官方預設css,沒有它頁面不能工作。

第一個script標簽用於引用JsAPI的核心文件。

注意到,body是整個頁面的組織,在這里只有一個id為viewDiv的div,用於承載視圖。

在link標簽上還有這么一個style樣式標簽,是對頁面樣式的預設,其實很簡單,僅僅是對html的一些元素做無邊框處理而已。

3. script標簽的內容

把js代碼折疊后,是這樣的:

收縮起的代碼上篇已經解釋過了,map是數據,view是視圖,view通過SceneView類的構造函數中的傳參中的map屬性進行連通,這里就不再復述。

結構圖是這樣的:

require()是JsAPI的基礎——Dojo框架規定的一個全局入口,與初學C語言時接觸的main()函數類似。

3.1 類引用列表

第一個參數,是一個字符串數組。它規定了接下來的代碼需要用哪些類(官方說法叫模塊),用字符串描述了所需類(模塊)所在的包路徑。與C#中using 命名空間;類似。

如"esri/views/SceneView"就代表引用esri這個包下的views這個包里的SceneView這個類。不妨在瀏覽器調試窗口中看看資源:

因為第一個script標簽引用的地址是“https://js.arcgis.com/4.7/”,所以esri這個包就是基於此目錄下的相對路徑了。

同理,"esri/Map"也是這樣引用的一個類。

至於"dojo/domReady!"這個,則是dojo框架的一個特殊類(模塊),所以會在"domReady"后加一個嘆號,這是dojo的一個插件,代表DOM加載完成后再執行后面的代碼。

3.2 回調函數

回調函數的形參列表除了"dojo/domReady!"這個特殊的之外,均要與類引用列表中的類順序上一一對應,但是名字可以自由,一般與官方的類名一致。

至於本例中回調函數的內容,上篇講過啦。

既可以用Lambda表達式,也可以在外部定義函數,傳函數名進require()中。

對了,上篇沒講如何將SceneView與HTML元素綁定的,其實只是SceneView構造函數中的一個屬性而已:

container屬性利用id選擇器(不用寫#)選擇div。

scale是比例尺,center是中央經緯度。

3.3 總結

由於AMD規范的要求,require()就是這么一個異步操作。你要告訴后台,你要用哪些功能(參數1,類引用列表),你要拿這些功能做什么(參數2,回調函數)。

回調函數就代表,等相關的資源准備好后,再根據此回調函數做事情。回調函數中仍存在很多異步操作,這就是ES6中Promise的用法了,when()異步鏈使得異步操作寫起來更方便,如果對異步和回調有什么不懂的,請到網上查資料學習,在此不展開了——但是,異步操作仍然是JsAPI中極為重要的一個技術。

4. 骨架整理圖&總結

總結就是,require()這個唯一入口,帶了一個引用列表(字符串數組),帶了一個回調函數。

回調函數里寫你需要做的事情,當然,回調的形參要與引用列表一一對應。

以下是骨架圖。

本篇到此結束,有了這個骨架,后面只是在script標簽里加自己的內容而已。

待工程茁壯到一定規模的時候,dojo的模塊化技術才能用得上,那並不是本入門教程的內容了。

背景也交代完了,下篇進入約定好的幾個部分的API的講解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM