dojo: herança com valor padrão - o mixin não acontece
-
21-08-2019 - |
Pergunta
Quero declarar uma nova classe dojo herdando de uma classe dojo existente, mas com a minha própria escolha de valores padrão para propriedades da classe. (O usuário ainda pode substituir esses valores.)
Eu estou declarando a minha própria versão do dijit.form.FilteringSelect
tal que:
- os padrões de propriedade
hasDownArrow
parafalse
(em vez dotrue
padrão) e - há uma
storeUrl
propriedade possível extra que me permite conectar oFilteringSelect
aoQueryReadStore
correspondente.
Aqui está o que eu fiz, sem sucesso:
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, I tentar gerar declarativa no HTML como uma versão do my.FilteringSelect
:
<input type="text" id="birthplace" name="birthplace"
promptMessage="Start typing, and choose among the suggestions"
storeUrl="/query/regions"
dojoType="my.FilteringSelect" />
Este vai realmente criar um FilteringSelect
com o promptMessage
desejado (o que significa que a superclasse está recebendo corretamente os parâmetros), mas hasDownArrow
é true
(ao contrário do meu mixin padrão) eo store
é null
(e os relatórios console do Firebug que storeUrl
é "undefined
").
O que estou fazendo de errado?
Solução
Ops! Eu realmente tinha coisas em sua cabeça. Eu encontrei o caminho em torno da direita. As seguintes 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});
}
}
);