首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XPages 9与Esri地图dojo冲突:'defineAlreadyDefined‘

XPages 9与Esri地图dojo冲突:'defineAlreadyDefined‘
EN

Stack Overflow用户
提问于 2013-07-19 07:08:46
回答 2查看 923关注 0票数 1

随着我们对dojo版本9和Esri ARcgis javascript api v3.5的更新,我们的XPages命名空间出现了问题,导致了defineAlreadyDefined错误。这里列出了一些类似的问题(Using Durandal dojoConfig and ESRI MapsHow can I fix this AMD path conflict?),但即使有了这些帮助,我们也无法让它正常工作。我认为问题出在dojoConfig语法上--任何想法或帮助都将不胜感激!

下面是我们的xpage源代码的一个简单版本,其中包含js:

代码语言:javascript
复制
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.resources>
 <xp:styleSheet
  href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/dojo/dijit/themes/claro/claro.css">
 </xp:styleSheet>
 <xp:styleSheet
  href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/esri/css/esri.css">
 </xp:styleSheet>
 <xp:script clientSide="true">
 // dojo.registerModulePath("esri","http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/esri");

 dojoConfig = {
  baseUrl: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/esri", 
  packages: [
   {
    name: 'dojo',
    location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/dojo/dojo/"
   },
   {
     name: 'dojox',
     location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/dojo/dojox"
   },
   { 
     name: 'esri',
     location: "http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/esri"
    }
   ]};
 </xp:script>
  <xp:script src="http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/"
            clientSide="true">
  </xp:script>    
  <xp:dojoModule name="esri.map"></xp:dojoModule>
 </xp:this.resources>
 <xp:eventHandler event="onClientLoad" submit="false">
    <xp:this.script><![CDATA[var map;
    function init(){
     var map = new esri.Map("mapDiv", {
        center: [-56.049, 38.485],
        zoom: 3,
        basemap: "streets"
      });
    }
    dojo.ready(init);

   ]]></xp:this.script>

如果我们包含dojo.registerModulePath命令,映射确实会加载(至少在FF中),但会出现错误。如果没有它,esri dojo将无法加载-它在错误的位置查找esri文件。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-14 20:00:14

好吧,这对我来说也是个问题!我已经能够通过使用以下代码使其正常工作:

代码语言:javascript
复制
    <xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:this.resources>
        <xp:script clientSide="true">
            dojo.registerModulePath("esri","http://js.arcgis.com/3.8/js/esri");
            dojoConfig = { baseUrl: "http://js.arcgis.com/3.8/js/esri",
            packages: [ { name: 'esri', location: "http://js.arcgis.com/3.8/js/esri" } ]};
        </xp:script>
        <xp:styleSheet href="http://js.arcgis.com/3.8/js/esri/css/esri.css" />
        <xp:styleSheet href="http://js.arcgis.com/3.8/js/esri/dijit/css/Popup.css" />
  <xp:dojoModule name="esri.map"></xp:dojoModule>
    </xp:this.resources>
    <xp:eventHandler event="onClientLoad" submit="false">
        <xp:this.script><![CDATA[var map;
    function init(){
     var map = new esri.Map("mapDiv", {
        center: [0,53],
        zoom: 10,
        basemap: "streets"
      });
    }
    dojo.ready(init);

   ]]></xp:this.script>
    </xp:eventHandler>
    <div id="mapDiv" style="width:1000px;height:600px"></div>
    </xp:view>

我认为脚本的顺序很重要,您不需要两次包含esri.map脚本。

票数 0
EN

Stack Overflow用户

发布于 2013-07-19 14:31:50

您需要记住几件事,并可能相应地更改代码:

  • xPages已经通过xsp-config使用了dojoconfig

文件选项或使用xPages参数。

  • 正如Per提到的,dojo已经在xPages中使用了,所以您不需要从其他地方加载它(同样适用于CSS)。

您可以做的是:

  • 选项1:对地图使用JS库的离线副本。您可以将它们作为JS资源添加到xPages应用程序中。您只需在xPage中指定它们,并像以前一样加载dojo模块;
  • 选项2:在xPage加载

之前,请参阅下面的how to inject dojoConfig options

代码:

代码语言:javascript
复制
<xp:this.properties>
    <xp:parameter name="xsp.client.script.dojo.djConfig" value="packages: exPackages" />
</xp:this.properties>
<xp:this.beforePageLoad>
    <![CDATA[#{javascript:
        var exCon = facesContext.getExternalContext();
        var response = exCon.getResponse();
        var writer = response.getWriter();
        writer.write("<script>\n");
        writer.write("var exPackages=[{name:'esri',location:'http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/esri'}]\n");
        writer.write("</script>\n");
        }]]>
</xp:this.beforePageLoad>
<xp:this.resources>
    <xp:dojoModule name="esri.map"></xp:dojoModule>
</xp:this.resources>

更新:代码的小更正。

Dojo :在简要查看了ArcGis网站之后,他们似乎选择了将Dojo与他们的API一起提供(在我看来这是错误的)。请参阅https://developers.arcgis.com/en/javascript/jshelp/inside_dojoversion.html (part2),尽管它对您没有多大帮助,因为它们没有为Dojo1.8.x提供可行的解决方案

看到他们的API不是免费的,我认为最好的方法是联系他们,要求将API的ESRI部分作为单独的下载,托管在您自己的服务器上,并遵循选项1或2。此外,您尝试使用的API版本基于Dojo 1.8.3,而Domino 9具有Dojo 1.8。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17735494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档