1

既存のdojoクラスを継承する新しいdojoクラスを宣言したいのですが、クラスのプロパティのデフォルト値を自分で選択します。(ユーザーは引き続きこれらの値をオーバーライドできます。)

私はそのdijit.form.FilteringSelectような自分のバージョンを宣言しています:

  • プロパティのhasDownArrowデフォルトはfalse(標準ではなくtrue)であり、
  • 対応するstoreUrlに接続できるようにする追加の可能なプロパティがあります。FilteringSelectQueryReadStore

これが私が成功せずにしたことです:

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" />

これは確かに目的のaを作成しFilteringSelectますpromptMessage(これはスーパークラスが適切にパラメータを取得していることを意味します)が、 (私のデフォルトのミックスインとは異なり)hasDownArrowis (そしてFirebugコンソールは " "であると報告します)です。truestorenullstoreUrlundefined

私は何が間違っているのですか?

4

1 に答える 1

1

おっと!私は本当に彼らの頭に物事を持っていました。私は正しい道を見つけました。次の作品:

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});
      }
   }
);
于 2009-02-04T04:51:08.090 に答える