哪里可以在arcgis js api中使用parser.parse

时间:2015-07-18 10:55:45

标签: javascript dojo requirejs arcgis-js-api

我有一个使用 ArcGIS js API和 RequireJS 的代码。 当我评估parser.parse();

时,我收到错误 k.isXdUrl不是函数

这是我的代码:

require.config({
    paths: {    
        'esri'      :   'http://js.arcgis.com/3.12/esri',
        'dojo'      :   'http://js.arcgis.com/3.12/dojo',
        'dojox'     :   'http://js.arcgis.com/3.12/dojox',
        'dijit'     :   'http://js.arcgis.com/3.12/dijit',
        'jquery'    :   'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min',
        'app'       :   'app'
    }
});

require([
    'jquery',
    'dojo/parser',
    'dijit/layout/BorderContainer', 'dijit/layout/ContentPane'
], function($, parser){
    require(['app'], function(){
        $(document).ready(function(){
            parser.parse(); //IS IT PROPER PLACE FOR THIS?
            var PARKI_APP = new MapApplication();
            $.getJSON(PARKI_APP.CONFIG_FILE, function(json){
                if (json.app)       PARKI_APP.initApp(json.app);
                if (json.map)       PARKI_APP.initMap(json.map);
                if (json.widgets)   PARKI_APP.initWidgets(json.widgets);
            });
        });
    });
});

我猜这个问题是由initMap函数引起的,因为它异步加载其他模块。以下是initMap函数的代码:

initMap: function(json){
        var config = {
                center : json.center || this.prototype.appDefaults.center,
                zoom : json.zoom || this.prototype.appDefaults.zoom,
                featureLayers: json.featureLayers
            },
            id = this.prototype.MAP_HTML_ID,
            app = this;

        require([
            'esri/map',
            'esri/tasks/GeometryService',
            'esri/toolbars/edit',

            'esri/layers/ArcGISTiledMapServiceLayer',
            'esri/layers/FeatureLayer',

            'dojo/dom',
            'dijit/layout/BorderContainer', 'dijit/layout/ContentPane'
        ], function(
            Map, GeometryService, Edit,
            ArcGISTiledMapServiceLayer, FeatureLayer,
            dom
        ) {
            var map,
                layers = config.featureLayers,
                featureLayers = [];

            //This service is for development and testing purposes only. We recommend that you create your own geometry service for use within your applications. 
            esriConfig.defaults.geometryService = new GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");            

            map = new Map(id, {
                basemap: "streets",
                center: config.center,
                zoom: config.zoom
            });

            var labels = new ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer");
            map.addLayer(labels);
            //feautre layers
            for (var i = 0, l = layers.length; i < l; i++) {
                var fLayer = new FeatureLayer(layers[i].url, {
                    mode: FeatureLayer.MODE_ONDEMAND,
                    outFields: ['*']
                });
                featureLayers.push(fLayer);
            };
            map.addLayers(featureLayers);
            app.setMapParams(config);
            app.setMap(map);
        })

    },

以下是 HTML 的部分内容:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <!--The viewport meta tag is used to improve the presentation and behavior of the samples 
          on iOS devices-->
        <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
        <link rel="stylesheet" href="http://js.arcgis.com/3.14/esri/css/esri.css">
        <link rel="stylesheet" href="css/custom_style.css">
        <script data-main="main.js" src="libs/require.js"></script>
    </head>
    <body class="claro">
        <div id="main" data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design:'headline'">
            <div class="panes" data-dojo-type="dijit/layout/ContentPane" id="header" data-dojo-props="region:'top'">
                <p>AAA</p>
            </div>
            <div id="leftPanes" class="panes" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'left'" style="width: 210px;overflow:hidden;">
            </div>
            <div data-dojo-type="dijit/layout/ContentPane" id="map" data-dojo-props="region:'center'"></div>
        </div>
    </body>
</html>

您认为我的代码有任何问题吗?

感谢。

1 个答案:

答案 0 :(得分:1)

我解决了我的问题。不要使用RequireJS。 当我将 ArcGIS API 附加到我的HTML文件时,我可以使用

require(['myJsFileOnLocalHost.js']);

但最后使用'.js',就像我写的那样here