1

我希望声明一个从现有 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”)。

我究竟做错了什么?

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 回答