dojo/parser::p arse() error TypeError {stack: (...), message: "无法读取未定义的属性'toString'"}



我正试图从这里获得概述地图示例:

https://developers.arcgis.com/javascript/jssamples/widget_overviewmap.html

在我的网站。我有两个错误。Chrome给出了上面的标题和IE给出了"dojo/parser::parse() errorTypeError:无法获得属性'toString'的未定义或空引用"。

也Chrome给我的错误:未捕获的TypeError:未定义的不是一个函数,当我有OverviewMap变量在我的函数,IE说SCRIPT438:对象不支持属性或方法'byId'。如果我像这样注释它:

/*OverviewMap,*/ dom) {

和下面对它的引用,我没有看到后面两个错误。

看这个:https://gis.stackexchange.com/questions/86674/arcgis-api-for-javascript-error-in-dojo-parser-parse

我注意到,在下面的.cshtml文件中,我没有Lang=en,但是当我查看控制台时,它被添加到HTML中。所以我添加了这个:

<script>
    dojoConfig = {       
        locale: 'en-us'
    };
</script>

但没有变化。

@model Site.Models.LoginModel
@{
    ViewBag.Title = "My Map";
}
@functions{
    public string GetAntiForgeryToken()
    {
        string cookieToken, formToken;
        AntiForgery.GetTokens(null, out cookieToken, out formToken);
        return cookieToken + ":" + formToken;                
    }
}

@if (1==1)
{
    @section toolbar {
        <li>
            <div id="navToolbar" data-dojo-type="dijit/Toolbar" style="display:none">
      <div data-dojo-type="dijit/form/Button" id="printSimple" data-dojo-props="iconClass:'esriPrintIcon', label:'Print'"></div>
      <div data-dojo-type="dijit.form.Button" id="measure" data-dojo-props="label:'Measure', iconClass:'esriMeasureIcon'"></div>
      <div data-dojo-type="dijit/form/Button" id="zoomin"  data-dojo-props="iconClass:'zoominIcon'">Zoom In</div>
      <div data-dojo-type="dijit/form/Button" id="zoomout" data-dojo-props="iconClass:'zoomoutIcon'">Zoom Out</div>
      <div data-dojo-type="dijit/form/Button" id="zoomfullext" data-dojo-props="iconClass:'zoomfullextIcon'">Full Extent</div>
      <div data-dojo-type="dijit/form/Button" id="zoomprev" data-dojo-props="iconClass:'zoomprevIcon'">Prev Extent</div>
      <div data-dojo-type="dijit/form/Button" id="zoomnext" data-dojo-props="iconClass:'zoomnextIcon'">Next Extent</div>
      <div data-dojo-type="dijit/form/Button" id="pan" data-dojo-props="iconClass:'panIcon'">Pan</div>
      <div data-dojo-type="dijit/form/Button" id="deactivate" data-dojo-props="iconClass:'deactivateIcon'">Deactivate</div>
                </div>
        </li>
        <!--        
        <li>
            <img src='@Href("~/Images/map/identify_b.png")' />
        </li>
         <li>
            <img src='@Href("~/Images/map/zoom_in_b.png")' />
        </li>
        <li>
            <img src='@Href("~/Images/map/zoom_out_b.png")' />
        </li>
         <li>
            <img src='@Href("~/Images/map/pan_b.png")' />
        </li>
      <li>
            <img src='@Href("~/Images/map/global_b.png")' />
        </li>
        <li>
            <img src='@Href("~/Images/map/print_b.png")' />
        </li> -->
        }

    <div class="row-fluid" style="height:100%">
        <input id="antiForgeryToken" type="hidden" value="@GetAntiForgeryToken()" />
        <div class="col col-lg-2 visible-desktop" >Sidebar</div>
     <!-- Bootstrap-map-js -->
        <div class="col col-lg-10">
                            <div style="position:absolute; right:20px; top:10px; z-Index:999;">
                    <div id="titlePane" data-dojo-type="dijit.TitlePane" data-dojo-props="title:'Measurement', closable:'true', open:'false'">
                        <div id="measurementDiv"></div>
                    </div>
                </div>
            <div id="mapDiv" data-dojo-type="dijit/layout/ContentPane"
                 data-dojo-props="region:'center'"
                 style="padding:0">
            </div>
       </div>
    </div>
}
else
{
    <div class="todoList" id="loginPanel">
        <section id="localLoginPanel">
            <h2>Log in</h2>
            @Html.Partial("_Login")
        </section>
        <section id="socialLoginPanel">
            <h2>Log in using another service</h2>
            @Html.Action("ExternalLoginsList", "Account", new { ReturnUrl = ViewBag.ReturnUrl })
        </section>
        <p>First time here? <a id="showRegister">Sign up</a></p>
    </div>
    <div class="todoList" id="registerPanel">
        <h2>Sign up</h2>
        @Html.Partial("_Register")
        <p>Already signed up? <a id="showLogin">Log in</a></p>
    </div>
}
</div>
@if (1==1)
{

    @section styles {
      @Styles.Render("~/bundles/bootstrap/map/css")
        <link rel= "stylesheet" type="text/css" href="http://js.arcgis.com/3.9/js/dojo/dijit/themes/claro/claro.css" />
      <link rel="stylesheet" type="text/css" href="http://js.arcgis.com/3.9/js/esri/css/esri.css"/>   

        }
    @section scripts {

        <!--
        @Scripts.Render("~/bundles/knockout")
        @Scripts.Render("~/bundles/jqueryval")
        @Scripts.Render("~/bundles/todo") -->

       <script src="http://js.arcgis.com/3.9/"></script>
<script>
    dojoConfig = {       
        locale: 'en-us'
    };
</script>

        <script>
            require(["esri/map", "application/bootstrapmap", "esri/toolbars/navigation",
        "dojo/on",
        "dojo/parser",
        "dijit/registry",
        "dijit/Toolbar",
        "dijit/form/Button",
          "esri/SnappingManager",
          "esri/dijit/Measurement",
          "dojo/dom",
        "esri/dijit/Scalebar",
         "dijit/layout/BorderContainer",
         "dijit/layout/ContentPane",
         "dijit/TitlePane",
         "esri/dijit/OverviewMap",
         "dojo/domReady!",

            ],
            function (Map, BootstrapMap, Navigation, on, parser, registry, Toolbar, Button, SnappingManager, Measurement, OverviewMap, dom) {
              var map = BootstrapMap.create("mapDiv",{
                  basemap:"national-geographic",
                  center:[-122.45,37.77],
                  zoom:12,
                  autoResize: true
              });

              parser.parse();
              navToolbar = new Navigation(map);
              on(navToolbar, "onExtentHistoryChange", extentHistoryChangeHandler);
              registry.byId("zoomin").on("click", function () {
                  navToolbar.activate(Navigation.ZOOM_IN);
              });
              registry.byId("zoomout").on("click", function () {
                  navToolbar.activate(Navigation.ZOOM_OUT);
              });
              registry.byId("zoomfullext").on("click", function () {
                  navToolbar.zoomToFullExtent();
              });
              registry.byId("zoomprev").on("click", function () {
                  navToolbar.zoomToPrevExtent();
              });
              registry.byId("zoomnext").on("click", function () {
                  navToolbar.zoomToNextExtent();
              });
              registry.byId("pan").on("click", function () {
                  navToolbar.activate(Navigation.PAN);
              });
              registry.byId("deactivate").on("click", function () {
                  navToolbar.deactivate();
              });
              $('#navToolbar').show();
              esri.config.defaults.geometryService = new esri.tasks.GeometryService("http://sampleserver3.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer");
               measurement = new Measurement({
                  map: map
              }, dom.byId("measurementDiv"));
              measurement.startup();
              registry.byId("measure").on("click", function () {
                  measurement.show();
              });
              function extentHistoryChangeHandler() {
                  $("#zoomprev").disabled = navToolbar.isFirstExtent();
                  $("#zoomnext").disabled = navToolbar.isLastExtent();
              }
              var overviewMapDijit = new OverviewMap({
                  map: map,
                  visible: true
              });
              overviewMapDijit.startup();
          });
    </script>
    }
}

根据答案编辑:

.
.
.
    "esri/dijit/OverviewMap",
         "dojo/domReady!",
 ],
            function (Map, BootstrapMap, Navigation, on, parser, registry, Toolbar, Button, SnappingManager, Measurement, OverviewMap, dom) {
.
.
.

但没有修复

从页面的HTML标签中移除lang="en"属性

看起来问题是您没有在需求列表和相关变量列表的同一位置获得Overview映射。所需的每个模块都被传递给函数,并在相同的索引处分配给变量名。因此,require语句中的第一项是"esri/map"。这将传递给函数定义中的第一个变量:Map。因此,Map是对esri/Map模块的引用。目前还好。

因为有些模块不(总是)需要传递给函数定义中的变量,它们只是在最后,例如,你没有"dijit/TitlePane"等的引用。因此,您需要将esri/dijit/OverviewMap的需求向上移动。它需要与要传递给它的变量名放在同一个位置。放在esri/dijit/Measurement和dojo/dom之间。

希望这能解决问题,但如果不能,请告诉我。

最新更新