dojo: наследование со значением по умолчанию - миксин не происходит - PullRequest
1 голос
/ 04 февраля 2009

Я хочу объявить новый класс 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").

Что я делаю не так?

1 Ответ

1 голос
/ 04 февраля 2009

Oops! У меня действительно были вещи на их голове. Я нашел правильный путь. Следующие работы:

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});
      }
   }
);
...