带有Esri的XPages 9映射dojo冲突:';定义已定义';

带有Esri的XPages 9映射dojo冲突:';定义已定义';,dojo,xpages,esri,Dojo,Xpages,Esri,随着我们对XPages版本9和Esri ARcgis javascript api V3.5的更新,我们的dojo名称空间出现了问题,导致了一个defineAlreadyDefined错误。这里列出了一些类似的问题(,),但即使有了这些帮助,我们也无法让它工作。我相信问题在于dojoConfig语法-任何想法或帮助都将不胜感激 下面是我们使用js的xpage源代码的简单版本: <xp:view xmlns:xp="http://www.ibm.com/xsp/core"> <x

随着我们对XPages版本9和Esri ARcgis javascript api V3.5的更新,我们的dojo名称空间出现了问题,导致了一个defineAlreadyDefined错误。这里列出了一些类似的问题(,),但即使有了这些帮助,我们也无法让它工作。我相信问题在于dojoConfig语法-任何想法或帮助都将不胜感激

下面是我们使用js的xpage源代码的简单版本:

<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>

//注册表模块路径(“esri”http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/esri");
dojoConfig={
基本URL:“http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/esri", 
套餐:[
{
名称:“dojo”,
地点:“http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/dojo/dojo/"
},
{
名称:“dojox”,
地点:“http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/dojo/dojox"
},
{ 
名称:“esri”,
地点:“http://serverapi.arcgisonline.com/jsapi/arcgis/3.5/js/esri"
}
]};


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

您需要记住的事情很少,并且可能会相应地更改代码:

  • xPages已经通过xsp config使用了dojoconfig
    文件选项或使用xPages参数
  • 正如Per所提到的,dojo已经在xPages中使用,所以您不需要从其他地方加载它(同样适用于CSS)
您可以执行以下操作:

  • 选项1:使用地图JS库的脱机副本。您可以添加它们 作为JS资源添加到您的xPages应用程序。您只需指定 在xPage中加载它们,并像以前一样加载dojo模块
  • 选项2:请参阅下面如何在加载xPage之前注入更多dojoConfig选项
代码:


更新:代码的小修改

更新2:在简要检查了ArcGis网站之后,他们似乎选择了将Dojo与API一起提供(我认为这是错误的)。请参阅(第2部分),尽管这对您没有多大帮助,因为它们没有为Dojo1.8.x提供可行的解决方案


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

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

    <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”http://js.arcgis.com/3.8/js/esri");
dojoConfig={baseUrl:“http://js.arcgis.com/3.8/js/esri",
包:[{名称:'esri',位置:http://js.arcgis.com/3.8/js/esri" } ]};

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

如果从包中删除dojo和dojox,会发生什么?XPages已经加载了dojo/dojox(除非您禁用它),感谢您的帮助!我们也向ESRI提交了一份清单,但他们既无法找出如何重新映射,也无法提供未嵌入dojo的API版本。正如您所说,它也不是完全相同的版本,尽管xpages可能可以与1.8.3配合使用。我们将尝试让它与您的选项2一起工作。
    <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>