Javascript Dojo如何扩展dijit类?
在使用以下代码时,我需要在dijit/form/Select上添加一些自定义函数,但出现以下错误: 未捕获类型错误:SelectGroup不是构造函数 如何解决这个问题Javascript Dojo如何扩展dijit类?,javascript,dojo,dijit.form,Javascript,Dojo,Dijit.form,在使用以下代码时,我需要在dijit/form/Select上添加一些自定义函数,但出现以下错误: 未捕获类型错误:SelectGroup不是构造函数 如何解决这个问题 require([ 'dijit/form/Select', 'dojo/_base/window', 'dojo/domReady!' ], function(Select, win) { var SelectGroup = define([ "dojo/_base/declare", "di
require([
'dijit/form/Select',
'dojo/_base/window',
'dojo/domReady!'
], function(Select, win) {
var SelectGroup = define([
"dojo/_base/declare",
"dijit/form/Select"
], function(declare, Select) {
return declare(Select, {
myCustom: function() {
alert('hey custom');
}
});
});
var select = new SelectGroup({
name: 'select',
options: [{
label: '<i>Colors I love</i>',
value: 'G 1',
disabled: true
}, {
label: 'Red',
value: '1'
}, {
label: 'Green',
value: '2',
selected: true
},
]
}, 'select');
select.on('change', function(value) {
alert(value);
});
});
我认为这只是您在编写define-inside-require、AMD-imbridge调用时的一个错误 很简单,你只需要做所有的importrequire,包括declare和调用declare,就可以直接创建你的小部件,它会在你的var SelectGroup引用中返回新的小部件 请在下面找到一个工作片段: 要求[ dojo/_base/declare, dijit/form/Select, “dojo/_基座/窗口”, “dojo/domReady!” ],函数declare,Select,win{ var SelectGroup=declareSelect{ myCustom:函数{ 警报“hey custom calue is=”+this.value; } }; var select=new SelectGroup{ 名称:“选择”, 选项:[{ 标签:“我喜欢的颜色”, 值:“g1”, 残疾人士:对 }, { 标签:“红色”, 值:“1” }, { 标签:“绿色”, 值:“2”, 所选:真 }, ] },“选择”; 选择。在“更改”上,选择functionvalue{ 选择.myCustom; }; }; window.dojoConfig={ parseOnLoad:false, 异步:true };
define和declare之间有什么区别?是的,我们无法比较declare和define:,declare是一个js类,在dojo中我们可以创建、类、小部件,并扩展现有的类或小部件,但define是一个dojo AMD加载程序,它异步加载这些类、小部件,所以你可以说比较require和define,而不是declare declare是一个加载类,rquire define是加载类。在dojo standart中,创建一个新类时,你必须选择define,它为你创建的小部件创建一个作用域,并将引用的小部件加载到回调函数中,对于require,它只将引用加载到claback,在您的示例中,您将它们混合在一起,require->并在其中定义一个define,我认为这是问题的原因。因此,如果您想在不同的js文件中创建小部件,请使用define,然后按require将其导入调用的js文件中,否则,只需对所有参考使用require,包括贴花和创建您的小部件/类。完成了: