2017-06-07 4 views
1

Ich brauche eine benutzerdefinierte Funktion auf dijit/form/Select im Moment habe ich den folgenden Code verwenden, um hinzuzufügen, aber ich bekomme die folgende Fehlermeldung:Dojo, wie eine Dijit-Klasse zu erweitern?

Uncaught TypeError: SelectGroup is not a constructor

Wie dieses Problem zu beheben?

Antwort

1

Ich denke, es war nur ein Fehler von Ihnen beim Schreiben der Define() innerhalb erfordern, (AMD Schmach Aufrufe)!

Es ist einfach, Sie müssen nur Ihre Import machen (erfordert), einschließlich des declare, und der Anruf declare (Ihr Widget direclty machen), es wird das neue Widget in Ihrer var SelectGroup Referenz zurückkehren

Bitte finden Sie eine Arbeits Schnipsel:

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="//ajax.googleapis.com/ajax/libs/dojo/1.12.1/dijit/themes/claro/claro.css" /> 
 

 
<script> 
 
    window.dojoConfig = { 
 
    parseOnLoad: false, 
 
    async: true 
 
    }; 
 
</script> 
 

 

 
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.12.1/dojo/dojo.js"></script> 
 

 
<body class="claro"> 
 
    <div id="select"></div> 
 
</body>

+0

, was der Unterschied zwischen definieren und erklären ist? – Radex

+1

Ja, wir können keinen Vergleich zwischen deklarieren und definieren :), deklarieren ist eine JS-Klasse, die wir im Dojo erstellen können, Klassen, Widget, und auch bestehende Klassen oder Widgets erweitern, Aber definieren, ist ein Dojo AMD Loader, welche laden diese Klasse, Widget asynchron, so können Sie sagen, Vergleich zwischen require, und definieren, nicht mit der deklarieren (deklarieren ist eine geladene Klasse) und rquire define sind Lader –

+0

In Dojo Standart, Erstellen einer neuen Klasse, müssen Sie Wählen Sie define, das einen Bereich für Ihr erstelltes Widget erstellt + lädt das Referenced Widget in Callback-Funktion, und für require lädt es nur die refrences zum claback, in Ihrem Beispiel mixten Sie sie, require -> und darin eine Definition in der ich denke Es verursachte das Problem. –