2016-11-11 1 views
0

also vorstellen, dass es ein Zuhörer für native dijit/form/Select Element, das für change Ereignis hört:Dojo: wie ‚Veränderung‘ emittieren richtig auf individuelle Widget

nativeSelectWidget.on('change', lang.hitch(this, onSelectClick)); 

Nun, ich habe meine eigene benutzerdefinierte erstellt Widget ähnlich auswählen und mit dem gleichen Code zu hören versuchen:

mySelectWidget.on('change', lang.hitch(this, onSelectClick)); 

die onSelectClick wie folgt aussieht:

_onTypeChange: function(value) { 
    console.debug('The value is, value) 
} 

Das Problem ist, dass im zweiten Fall onSelectClick keine Werte() erhalten.

versucht hinzuzufügen:

on.emit(this.domNode, 'change', { 
    bubbles: true, 
    cancelable: true 
}); 

_setValueAttr des widget, versuchte, es zu entfernen. Kein Wert wurde übergeben .. überprüft, wie nativ Select definiert ist - https://github.com/dojo/dijit/blob/master/form/Select.js

Irgendwelche Vorschläge?

Antwort

1

Für die Art und Weise Sie es verwenden möchten, sollten Sie (in Ihrem benutzerdefinierten Widget) tun:

1) erbt von dojo/Evented
2) folgendes hinzufügen:

_setValueAttr: function(value) { 
    this._set('value', value); 
    this.emit('change', value); 
} 

das tun sollten Der Trick

Allerdings hat diese Implementierung einen Nachteil: Wenn Sie den Wert von einem anderen Stück Code ändern, wird die emittiert werden immer noch, und in der Regel wollen wir die nur für Benutzerereignisse, nicht für programmatische Änderungen.

Verwandte Themen