【发布时间】:2014-09-03 23:54:39
【问题描述】:
我有一个带有 dojo 布局小部件的自定义 dojo 小部件
模板如下
<div>
<div data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="gutters:false" id="mainPanel" style="padding: 0px">
<div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top', splitter:false" style="padding: 0px">
Saartha Labs Pvt Ltd
</div>
<div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'top', gutters: false, splitter:false" style="padding: 0px" >
<div id="toolBar"></div>
</div>
<div id="map-div" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center', splitter:false"></div>
<div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'bottom', splitter:false" style="display: none" ></div>
</div>
</div>
自定义小部件如下“Canvas.js”
define([
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_WidgetsInTemplateMixin",
"dijit/_OnDijitClickMixin",
"dijit/_TemplatedMixin",
"dojo/text!./canvas.html",
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane"
], function (declare, _WidgetBase,_WidgetsInTemplateMixin, _OnDijitClickMixin,_TemplatedMixin, template) {
return declare([_WidgetBase,_OnDijitClickMixin, _TemplatedMixin,_WidgetsInTemplateMixin], {
templateString: template
// your custom code goes here
});
});
使用时尝试使用新的画布 它会引发如下错误。
require([
"bhuvi/canvas/Canvas",
"dojo/domReady!"],
function(Canvas){
var canvas = new Canvas();
canvas.placeAt(window.document.body);
});
错误为
“尝试使用 id==mainPanel 注册小部件,但该 id 已注册”
【问题讨论】:
-
当您尝试注册一个小部件(在本例中为 BorderContainer )两次时会发生此错误,而它仍然是第一个实例,我该怎么说,活着。您是否检查过您的小部件是否没有构建双倍?
-
这是测试代码..所以它没有初始化两次..根据文档我们不能将布局小部件放在模板中..
-
我看不出为什么不应该在模板中使用布局小部件的原因,恰恰相反。只需确保您没有两次初始化小部件(可能来自标记?)并按照下面的答案小心这些 ID。
-
来自 api 文档 [link] dojotoolkit.org/reference-guide/1.9/dijit/… dijit._WidgetsInTemplateMixin mixin 不支持将布局小部件添加为子小部件。特别是对孩子的 startup() 和 resize() 调用存在问题。
标签: javascript dojo widget