我有一個現有的基於ESRI ArcGis Javascript api的應用程序,其中應該添加measurement widget。 當我嘗試啓動這個小工具收到以下錯誤:添加esri小部件導致重複的id錯誤
- 道場/解析器解析::()error錯誤:試圖與ID插件註冊== dijit_layout_ContentPane_0但ID已被註冊
- 在_ContentSetter#未定義的錯誤錯誤分析:嘗試與ID插件註冊== dijit_layout_ContentPane_0但ID已被註冊
- 錯誤未定義,運行定製的onLoad代碼:這推遲已經解決
HTML:
個<div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="title:'Measurement'">
<div id="Measurement"></div>
</div>
JS:
require(["esri/IdentityManager",
"dojo/parser",
"user/MeasurementLoader"
], function(parser, MeasurementLoader) {
parser.parse();
//bootstrap other stuff
MeasurementLoader.init({
map: map
});
});
MeasurementLoader:
define([
"...",
],
function(dom, ...) {
esriConfig.defaults.geometryService = new GeometryService("http://ourarcgisserverurl");
var
sls = new SimpleLineSymbol("solid", new Color([195, 176, 23]), 2),
sfs = new SimpleFillSymbol("solid", sls, null),
init = function(options) {
var widget = new Measurement({
map: options.map,
fillSymbol: sfs,
lineSymbol: sls
//replace by options.container later on
}, dom.byId("Measurement"));
widget.startup();
};
return {
init: init
};
});
到該錯誤的解決方案應通過設置data-dojo-config="parseOnLoad: false"
,裝載在ArcGIS庫時,或通過去除parser.parse()
被禁用或者parseOnLoad。但這兩種解決方案都無法解決
刪除MeasurementLoader.init()
調用也會刪除錯誤,這表明我的代碼正在導致第二個解析調用或正在生成重複的ID。由於我的DOM一次只包含「dijit_layout_ContentPane_0」,所以我贊成第一個選項。
我在做什麼錯?
編輯:Simplified JsFiddle它再現了問題。我刪除了非必要的位,並將所有內容放在一個源文件中以使其更清晰。
可能你有其他的data-dojo-type =「dijit/layout/ContentPane」在你的應用程序中? –
當然,很多。在 – Marco
之前沒有問題可以創建一個示例Jsfiddle或任何地方..我們可以在哪裏重現相同的錯誤? –