dojo: eredità con valore di default - il mixin non accade
-
21-08-2019 - |
Domanda
Vorrei dichiarare una nuova classe dojo eredita da una classe dojo esistente, ma con la mia scelta di valori predefiniti per le proprietà della classe. (L'utente può comunque ignorare questi valori.)
I dichiaro la mia versione del dijit.form.FilteringSelect
tale che:
- le
hasDownArrow
default di proprietà difalse
(piuttosto che lo standardtrue
) e - c'è una proprietà più possibile
storeUrl
che mi permette di collegare ilFilteringSelect
al corrispondenteQueryReadStore
.
Ecco quello che ho fatto, senza successo:
dojo.provide("my.FilteringSelect");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dojox.data.QueryReadStore");
dojo.declare(
"my.FilteringSelect",
[
dijit.form.FilteringSelect, /* base superclass */
{ hasDownArrow:false, storeUrl:"/" } /* mixin */
],
{
constructor: function(params, srcNodeRef){
console.debug("Constructing my.FilteringSelect with storeUrl "
+ this.storeUrl);
this.store = new dojox.data.QueryReadStore({url:this.storeUrl});
}
}
);
Di ', provo a generare in modo dichiarativo nel codice HTML come una versione di my.FilteringSelect
:
<input type="text" id="birthplace" name="birthplace"
promptMessage="Start typing, and choose among the suggestions"
storeUrl="/query/regions"
dojoType="my.FilteringSelect" />
Questa sarà davvero creare un promptMessage
con il desiderato store
(il che significa che la superclasse è sempre correttamente il params), ma è null
undefined
(contrariamente al mio mixin default) e il <=> è <=> (e la console Firebug riporta che <=> è "<=>").
Che cosa sto facendo di sbagliato?
Soluzione
Oops! Ho avuto davvero le cose sulla loro testa. Ho trovato il modo giusto intorno. Le seguenti opere:
dojo.provide("my.FilteringSelect");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dojox.data.QueryReadStore");
dojo.declare(
"my.FilteringSelect",
dijit.form.FilteringSelect,
{
hasDownArrow : false,
storeUrl : "/",
constructor: function(params, srcNodeRef){
dojo.mixin(this, params);
console.debug("Constructing my.FilteringSelect with storeUrl "
+ this.storeUrl);
this.store = new dojox.data.QueryReadStore({url:this.storeUrl});
}
}
);