当以编程方式实例化小部件时,Dojo重复ID错误,但不是以声明方式
Dojo duplicate ID error when instantiating a widget programmatically, but not declaratively
我使用的是Dojo 1.10。
我试图测试一个自定义小部件,但我得到一个关于重复ID的错误,当我在我的HTML文件中以编程方式添加它。声明式地添加它是可以的。在过去,当我不小心在小部件模板中使用ID属性时,我得到了这个错误,但是我在这个模板中没有ID。下面是一个简化的例子:
演示/TestWidget.jsdefine([
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dijit/_WidgetsInTemplateMixin",
"dojo/text!./template/TestWidget.html",
"dijit/layout/ContentPane",
], function(declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, template) {
return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {
baseClass: 'TestWidget',
templateString: template,
});
});
演示/TestWidget.html <div data-dojo-attach-point="containerNode">
<div data-dojo-type="dijit/layout/ContentPane">
Random Stuff
</div>
</div>
index . html:
<head>
<script>
var baseloc = location.pathname.replace(/'/[^/]+$/, "");
var dojoConfig = {
parseOnLoad: true, async: true,
packages: [ { name: "demo", location: baseloc + "/demo" } ]
};
</script>
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>
<script>
require([ "demo/TestWidget.js", "dojo/domReady!" ], function(TestWidget) {
var widget = new TestWidget({ }, 'testnode');
});
</script>
</head>
<body class="claro">
<div id="testnode"></div>
</body>
对于上面的代码,我得到的错误"试图注册小部件与id==dijit_layout_ContentPane_0,但该id已经注册"。但是,如果我删除脚本中的TestWidget实例化并将'testnode'替换为:
<div data-dojo-type="demo/TestWidget"></div>
它工作正常。知道我哪里做错了吗?
我认为问题是解析正在进行,而新元素正在创建,由于parseOnLoad
为真。如果您可以将其设置为false并在需要时显式调用parse
,则应该能够避免它。
尝试为模板中的内容窗格设置唯一id:
<div data-dojo-attach-point="containerNode">
<div data-dojo-type="dijit/layout/ContentPane" data-dojo-id=myContentPane_{id}>
Random Stuff
</div>
</div>
将id传递给构造函数中的Widget,以便在模板中替换它。确保每个实例的id是唯一的。
我的理解是,在声明性方法中,如果在声明性语法中没有显式提到id,则会自动创建唯一id。
相关文章:
- 如何以编程方式查找javascript语法错误的位置
- 如何检测以跨浏览器方式使用 Javascript 的 DOMParser 时的 XML 解析错误
- 什么's是在Node.js中公开和组合错误的最佳方式
- 以错误的方式反递减
- 以处理错误的方式启动javascript承诺蓝鸟链
- 你能帮我修复杰弗里方式滑块第一次尝试 imgWidth 错误吗?
- 节点断言错误未打印,断言以静默方式失败
- 以编程方式提交角度表单,但仍会收到 HTML5 验证错误
- 滚动过程中的错误行为,根据代码的链接方式显示
- 以什么方式触发骨干.js错误功能
- 我正在设置计时器,但我以错误的方式进行.所以请给我更好的方法来做到这一点
- 在Angular中显示表单验证错误的正确方式
- 我的查询获胜'因为一个剧本,它不能工作(它以错误的方式工作)!?但为什么呢?SESSIONS和PHP
- 什么'当从AngularJS中的API响应接收到错误时,触发错误弹出模式的最佳方式
- 未捕获的类型错误:无法读取属性'排序方式'的未定义
- Javascript和此错误.取决于函数的调用方式
- Opencart错误“;SyntaxError:意外的标记<"付款方式结账期间
- 检测方式“;拒绝显示文档,因为X-Frame-Options禁止显示"错误
- 如何在Typescript中使用CSSNext并避免讨厌的“;错误TS2349”;Typescript方式
- JQuery: fadeToggle()工作方式错误