質問

既存の 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 (これは、スーパークラスがパラメータを適切に取得していることを意味します)。 hasDownArrowtrue (私のデフォルトのミックスインとは異なります) storenull (そして 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});
      }
   }
);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top