dojo: héritage avec la valeur par défaut - le mixin ne se produit pas
-
21-08-2019 - |
Question
Je tiens à déclarer une nouvelle classe héritant de dojo d'une classe existante dojo, mais avec mon propre choix de valeurs par défaut pour les propriétés de la classe. (L'utilisateur peut toujours remplacer ces valeurs.)
Je déclare ma propre version du dijit.form.FilteringSelect
tel que:
- les paramètres par défaut de propriété
hasDownArrow
àfalse
(plutôt que la normetrue
) et - il y a une propriété supplémentaire possible qui me permet
storeUrl
pour connecter le correspondant auFilteringSelect
QueryReadStore
.
Voici ce que je l'ai fait, sans succès:
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});
}
}
);
Dis, je tente de générer déclarative dans la une telle version HTML my.FilteringSelect
:
<input type="text" id="birthplace" name="birthplace"
promptMessage="Start typing, and choose among the suggestions"
storeUrl="/query/regions"
dojoType="my.FilteringSelect" />
Ce sera en effet créer un avec le désiré promptMessage
store
(ce qui signifie que la superclasse reçoit correctement les params), mais est null
undefined
(contrairement à mon mixin par défaut) et le <=> est <=> (et les rapports console Firebug qui est <=> "<=>").
Qu'est-ce que je fais mal?
La solution
Oops! J'ai eu vraiment des choses sur leur tête. J'ai trouvé le bon sens. Les travaux suivants:
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});
}
}
);