2009-02-04 56 views
1

我希望聲明一個新的dojo類,它繼承自現有的dojo類,但是我自己選擇了類屬性的默認值。 (用戶仍然可以覆蓋這些值。)dojo:使用默認值繼承 - mixin不會發生

我聲明我自己的版本的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(違揹我的默認mi xin)和storenull(並且Firebug控制檯報告storeUrl是「undefined」)。

我在做什麼錯?

回答

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