Мне нужно добавить некоторые пользовательские функции в dijit/form/Select
в тот момент, когда я использую следующий код, но я получаю следующую ошибку:
Uncaught TypeError: SelectGroup не является конструктором
Как исправить эту проблему?
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);
});
});
Я думаю, что это была просто ошибка от вас, когда вы пишете определение() внутри require (вызовы AMD imbrication)!
Это просто, вы должны сделать весь свой импорт (требуется), включая объявление, и объявить вызов (чтобы сделать ваш виджет direclty), он вернет новый виджет в ссылку var SelectGroup
Ниже приведен рабочий фрагмент:
require([
"dojo/_base/declare",
"dijit/form/Select",
'dojo/_base/window',
'dojo/domReady!'
], function(declare, Select, win) {
var SelectGroup = declare(Select, {
myCustom: function() {
alert('hey custom calue is = '+this.value);
}
});
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) {
select.myCustom();
});
});
<link rel="stylesheet" href="/claro.css" />
<script>
window.dojoConfig = {
parseOnLoad: false,
async: true
};
</script>
<script src="/dojo.js"></script>
<body class="claro">
<div id="select"></div>
</body>