Non riesco a collegare correttamente l'evento onchange a un widget dijit.form.Select. Tuttavia, io sono nuovo allo sviluppo web, quindi potrei fare qualcosa di completamente idiota (anche se, come meglio posso dire (e ho letto tutti i documenti che ho trovato) non lo sono). Mi sono assicurato che la classe del corpo corrisponda al tema del dojo, che dojo.require() per tutti i widget che uso (e dojo.parser), e ancora, nada. Il codice che sto usando è:Non riesco ad andare suChange to fire per dijit.form.Select
dojo.addOnLoad(function() {
var _query = dojo.query('.toggle');
for (var i in _query) {
dojo.connect(_query[i], 'onchange', function (ev) {
console.log(ev + ' fired onchange');
});
}
});
Qualsiasi aiuto sarebbe apprezzato.
Aggiunta: dopo aver scavato più all'interno di come dijit esegue il rendering dei widget, ho scoperto che quando aggiungo la dojoType = 'dijit.form.Select' coppia valore-attributo al mio elemento html (facendo questo in modo dichiarativo), dijit in realtà esegue il rendering di una tabella a due colonne a una riga. Il primo elemento della tabella è una span (con la classe dijitSelectLabel) che presumo mostri solo l'elemento selezionato (o predefinito). Il secondo elemento sembra essere un pulsante visualizzato come una freccia verso il basso che alterna la visualizzazione degli elementi del menu in risposta a determinati eventi DOM. Inoltre (e ho pensato che fosse abbastanza carino), dijit in realtà non posiziona le opzioni di selezione nell'albero DOM finché non viene attivato uno di quegli eventi. Ho guardato l'HTML in firebug subito dopo un nuovo caricamento (prima di fare clic su qualsiasi cosa), e la seconda opzione non è da nessuna parte. Quindi, una volta che clicco sul pulsante freccia, c'è un dijit.Menu widget, dijit attacca un dijit.Menu alla fine del nodo del corpo; dopo aver cliccato da qualche altra parte, il widget Menu è ancora l'ultimo membro del corpo, ora è appena nascosto e non è collegato al modulo.Seleziona il widget.
Dovrebbe davvero essere così complicato se tutto quello che voglio fare è posizionare un diverso widget dijit.form nell'albero DOM a seconda di quale elemento l'utente seleziona?
Conclusione: Risulta che si trattava di un problema di capitalizzazione.
dojo.connect(widget_obj, 'onChange', function_obj);
funziona, mentre
dojo.connect(widget_obj, 'onchange', function_obj);
no.
Quindi avevo ragione che ero completamente stupido. Presuppone che, poiché la versione in minuscolo funziona quando si inserisce un tag html come attributo, Dojo lo tratterà allo stesso modo. Ha senso, perché dijit.form.Select non ha attributo .change, ma ha un attributo .onChange. (Ho finito per attaccare con un .Select su un .FilteringSelect perché non mi viene data alcuna impressione che i miei utenti possano digitare qualcosa.) Quindi, a quale di voi ragazzi do la risposta (perché entrambi avuto onChange nei tuoi post, credo che ero troppo inesperto per rendermi conto che il caso contava)?
Ho provato entrambi dijit.byId (nodeId) e dijit.byNode (nodo) e nessuno dei due ha funzionato. – yarmiganosca