dojo: la herencia con el valor por defecto - la mixin no sucede
-
21-08-2019 - |
Pregunta
Deseo declarar una nueva clase dojo que hereda de una clase dojo existente, pero con mi propia elección de los valores predeterminados para las propiedades de la clase. (El usuario todavía puede anular esos valores.)
Estoy declarando mi propia versión de la dijit.form.FilteringSelect
tal que:
- los valores predeterminados de propiedad
hasDownArrow
afalse
(en lugar de la normatrue
) y - hay una propiedad de los extras posibles
storeUrl
la que me permite conectar elFilteringSelect
a la correspondienteQueryReadStore
.
Esto es lo que hice, sin éxito:
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});
}
}
);
Say, intento generar de forma declarativa en el código HTML tal versión de my.FilteringSelect
:
<input type="text" id="birthplace" name="birthplace"
promptMessage="Start typing, and choose among the suggestions"
storeUrl="/query/regions"
dojoType="my.FilteringSelect" />
Esto de hecho crear un promptMessage
con la deseada store
(lo que significa que la superclase está recibiendo correctamente los parametros), pero es null
undefined
(contrario a mi mixin predeterminado) y el <=> es <=> (y la consola de Firebug informa que <=> es "<=>").
¿Qué estoy haciendo mal?
Solución
¡Huy! Realmente no tenía las cosas en su cabeza. He encontrado el camino a la vuelta. Las siguientes obras:
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});
}
}
);