Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Dojo如何扩展dijit类?_Javascript_Dojo_Dijit.form - Fatal编程技术网

Javascript Dojo如何扩展dijit类?

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

在使用以下代码时,我需要在dijit/form/Select上添加一些自定义函数,但出现以下错误:

未捕获类型错误: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);
  }); 

});

我认为这只是您在编写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,包括贴花和创建您的小部件/类。完成了: