未捕获的类型错误号不是自定义小部件的功能

时间:2014-11-18 23:21:21

标签: javascript dojo

我有一个自定义小部件(按钮),它打开另一个自定义小部件(对话框)。第一个小部件(按钮显示正常,但是当我尝试打开第二个小部件时,我收到了主题错误。

按钮小工具(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

感谢

1 个答案:

答案 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行有一个逗号。

希望这有帮助。