我有一个现有的基于ESRI ArcGis Javascript api的应用程序,其中应该添加measurement widget。当我尝试启动此小部件时,收到以下错误:
- dojo/parser::解析()错误错误尝试注册id == dijit_layout_ContentPane_0的小工具,但该id已注册
1.在_ContentSetter #中分析时出错未定义错误:尝试注册id == dijit_layout_ContentPane_0的小工具,但该id已注册
1.运行自定义onLoad代码时发生未定义错误:此延迟已解决
网址:
<div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="title:'Measurement'">
<div id="Measurement"></div>
</div>
联森:
require(["esri/IdentityManager",
"dojo/parser",
"user/MeasurementLoader"
], function(parser, MeasurementLoader) {
parser.parse();
//bootstrap other stuff
MeasurementLoader.init({
map: map
});
});
测量加载程序:
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
};
});
这个错误的解决方案应该是在加载arcgis库时通过设置data-dojo-config="parseOnLoad: false"
来禁用parseOnLoad,或者通过删除parser.parse()
来禁用parseOnLoad。
删除MeasurementLoader.init()
调用也会删 debugging 误,这些错误表明我的代码正在引起第二次解析调用或正在生成重复的id。由于我的DOM只包含"dijit_layout_ContentPane_0"一次,因此我倾向于第一个选项。
我哪里做错了?
编辑:Simplified JsFiddle重现了这个问题。我已经删除了不必要的部分,并把所有的东西放在一个源文件中,使它更清楚。
2条答案
按热度按时间watbbzwu1#
嗯,我试图解决它,它似乎有一些问题与ESRI测量小部件。
id
id==dijit_layout_ContentPane_0
声称,它是由**esri measurement widget
**本身动态生成的注册。以下屏幕截图了解更多详情-
但是,如果我们需要顶部的所有
dijit components
并移动顶部的parser.parse()
,则会删 debugging 误。尽管如此,我正在努力找到一些变通办法,这一点,我会更新,只要我会找到其他任何东西。
希望这对你有帮助:)
a6b3iqyw2#
您收到的错误:
错误:尝试注册id==dijit_layout_ContentPane_0的小部件,但该id已注册
表示应用程序中已存在另一个同名的ContentPane小部件。
parseOnLoad
true表示Dojo在加载页面后将dojo/parser应用于整个正文。这是一种简单的方法,适用于页面主要包含小部件且解析后不需要设置逻辑的情况。但实际上,许多应用程序需要在解析完成后运行设置代码,而parser.parse()
可能正是您所需要的。