使用带有Require JS的ESRI Javascript 4.0 API

时间:2016-05-17 14:02:12

标签: javascript dojo requirejs esri arcgis-js-api

将我的应用程序从Beta3版本的4.0 ArcGIS Javascript API切换到新版本的4.0 Javascript API时,我遇到了一些问题。

我在使用4.0 javascript API的beta3版本时有一个工作地图,并且已经配置了需要JS以正确的方式加载模块,如此版本

 requirejs.config({
    baseUrl: "/App/",
    paths: {
        "text": "/Scripts/text",
        "moment": "/Scripts/moment",
        "durandal": "/Scripts/durandal",
        "plugins": "/Scripts/durandal/plugins",
        "transitions": "/Scripts/durandal/transitions",
        "esri": "//js.arcgis.com/4.0beta3/esri",
        "dojo": "//js.arcgis.com/4.0beta3/dojo",
        "dojox": "//js.arcgis.com/4.0beta3/dojox",
        "dijit": "//js.arcgis.com/4.0beta3/dijit",
    },
});

然而,一旦我从4.0beta3切换到4.0

requirejs.config({
    baseUrl: "/App/",
    paths: {
        "text": "/Scripts/text",
        "moment": "/Scripts/moment",
        "durandal": "/Scripts/durandal",
        "plugins": "/Scripts/durandal/plugins",
        "transitions": "/Scripts/durandal/transitions",
        "esri": "//js.arcgis.com/4.0/esri",
        "dojo": "//js.arcgis.com/4.0/dojo",
        "dojox": "//js.arcgis.com/4.0/dojox",
        "dijit": "//js.arcgis.com/4.0/dijit",
    },
});

我在尝试加载地图时遇到错误,它正在尝试加载此脚本并且它提供了404

http://localhost:17654/Scripts/moment/moment.js 

我相信它正在尝试加载这个脚本,因为ESRI Api使用自己的时刻插件,因为我已经定义了什么时刻,它试图查看localhost而不是加载esri模块。

我尝试了一些带有require的不同配置,并且我可以在没有javascript错误的情况下加载页面但是没有地图显示

requirejs.config({
    baseUrl: "/App/",
    paths: {
        "text": "/Scripts/text",
        "moment": "/Scripts/moment",
        "durandal": "/Scripts/durandal",
        "plugins": "/Scripts/durandal/plugins",
        "transitions": "/Scripts/durandal/transitions",
        "esri": "//js.arcgis.com/4.0/esri",
        "dojo": "//js.arcgis.com/4.0/dojo",
        "dojox": "//js.arcgis.com/4.0/dojox",
        "dijit": "//js.arcgis.com/4.0/dijit",
    },
    map: {
        "*": {
            "moment/moment": "moment"
        }
    }
});

我知道javascript API使用自己的dojo版本,它应该处理模块加载,因此将它与require js混合可能甚至不可能但是因为它与beta3一起正常工作我希望找到一个让这个时刻插件正确加载并让地图使用require js的方法。

有没有人有这两个人一起工作的经验?任何帮助深表感谢。感谢

2 个答案:

答案 0 :(得分:2)

它应该可以使用requirejs,但是有一个特殊的原因你使用它而不是esri的AMD加载器,它的API下载?使用他们应该使事情变得更容易,但是你可能会使用他们的加载器遇到同样的问题,因为esri已经定义了包/别名。您可以尝试的一件事是为您的路径命名不同。像这样:

requirejs.config({
  baseUrl: "/App/",
  paths: {
    "text": "/Scripts/text",
    "local-moment": "/Scripts/moment",
    "durandal": "/Scripts/durandal",
    "plugins": "/Scripts/durandal/plugins",
    "transitions": "/Scripts/durandal/transitions",
    "esri": "//js.arcgis.com/4.0/esri",
    "dojo": "//js.arcgis.com/4.0/dojo",
    "dojox": "//js.arcgis.com/4.0/dojox",
    "dijit": "//js.arcgis.com/4.0/dijit",
  },
});

这样esri仍然需要moment,你可能需要local-moment

答案 1 :(得分:-2)

我想如果你的文件夹里有Scripts / moment / moment.js文件,一切都会好的。