додзё:наследование со значением по умолчанию – миксина не происходит
-
21-08-2019 - |
Вопрос
Я хочу объявить новый класс додзё, унаследованный от существующего класса додзё, но с собственным выбором значений по умолчанию для свойств класса.(Пользователь по-прежнему может переопределить эти значения.)
Я объявляю свою собственную версию dijit.form.FilteringSelect
такой, что:
- тот
hasDownArrow
свойство по умолчанию имеет значениеfalse
(а не стандартныйtrue
) и - есть дополнительное возможное свойство
storeUrl
что позволяет мне подключитьFilteringSelect
соответствующемуQueryReadStore
.
Вот что я сделал, но безуспешно:
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});
}
}
);
Скажем, я пытаюсь декларативно сгенерировать в HTML такую версию my.FilteringSelect
:
<input type="text" id="birthplace" name="birthplace"
promptMessage="Start typing, and choose among the suggestions"
storeUrl="/query/regions"
dojoType="my.FilteringSelect" />
Это действительно создаст FilteringSelect
с желаемым promptMessage
(это означает, что суперкласс правильно получает параметры), но hasDownArrow
является true
(в отличие от моего миксина по умолчанию) и store
является null
(и консоль Firebug сообщает, что storeUrl
является "undefined
").
Что я делаю не так?
Решение
Упс!У меня действительно были проблемы с головой.Я нашел правильный путь.Следующие работы:
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});
}
}
);