我有一个自定义小部件(按钮),它打开另一个自定义小部件(对话框)。第一个小部件(按钮显示正常,但是当我尝试打开第二个小部件时,我收到了主题错误。
按钮小工具(myButton.js)
define([
"custom/myDialog.js",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dijit/_WidgetsInTemplateMixin",
"dojo/_base/declare",
"dojo/text!./myButton.html",
"dijit/form/Button"
], function(myDiag, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, declare, myTemplate) {
return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin ], {
templateString: myTemplate,
OpenDialog: function(){
var d = new myDiag({});//uncaught type error: number is not a function
d.myDialog.startup();
d.myDialog.show();
}
});
});
按钮模板(myButton.html)
<div>
<button data-dojo-type="dijit/form/Button" data-dojo-attach-event="onClick:OpenDialog">click for dialog</button>
</div>
Dialog Widget(myDialog.js)
define([
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dijit/_WidgetsInTemplateMixin",
"dojo/_base/declare",
"dojo/text!./myDialog.html",
"dijit/form/Select",
"dijit/Dialog"
], function(_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, declare, myTemplate) {
return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin ], {
templateString: myTemplate,
});
});
对话框模板(myDialog.html)
<div>
<div data-dojo-type="dijit/Dialog" title="Mark Ticket" data-dojo-attach-point="myDialog">
<select id="selectReach" style="width: 150px; height:20px;" data-dojo-type="dijit/form/Select">
<option selected="selected">IV</option>
<option>IVA</option>
<option>IVB</option>
<option>IVD</option>
<option>IVE</option>
<option>V</option>
</select>
</div>
</div>
这是plunker
感谢
答案 0 :(得分:0)
myButton.js中的require myDialog
语句应为'custom/myDialog'
,而不是'custom/myDialog.js'
:
define([
"custom/myDialog",
"dijit/_WidgetBase",
...
在那里有.js,它试图从谷歌CDN加载myDialog.html,它显然无法找到它,从而使myDialog.js失败。
通过使用&#34;相关模块标识符&#34;来自同一软件包的其他模块的标准做法。 (以确保您正在加载正确的模块并提高可移植性),因此如果适用于您的情况,则应将其更改为'./myDialog'
。参见&#34;编写便携式模块&#34; this tutorial的一部分。
其他说明:只有在用户查看window.location
而不是directory/
时,您用于包裹声明的directory/index.html
方法才有效。
您想要从myDialog.html中删除id="SelectReach"
,因为您已经注册了这个ID,并且已经注册了这个ID&#34;尝试多次打开(创建)对话框时出错。完全避免在模板中使用ID。如果您需要引用选择输入,可以使用类query
。
你在myDialog.js第11行有一个逗号。
希望这有帮助。