道場:デフォルト値での継承 - ミックスインは行われません
-
21-08-2019 - |
質問
既存の Dojo クラスを継承する新しい Dojo クラスを宣言したいと考えていますが、クラスのプロパティのデフォルト値は独自に選択しています。(ユーザーはこれらの値をオーバーライドできます。)
私は独自のバージョンを宣言しています 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});
}
}
);
所属していません StackOverflow