2011-09-30 68 views
2

我想dijit.form.Button一個額外的屬性擴展,但這不是working.Code如下如何延長dijit.form.button

給出在file1.js

dojo.require('dijit.form.Button'); 
dojo.extend(dijit.form.Button,{xyz: ''}); 

在file2.jsp

<script type="text/javascript" src="file1.js"></script> 
<div dojoType="dijit.form.Button" xyz="abc"></div> 

然而,當我看着創建按鈕的HTML(通過右鍵點擊看出鉻,然後選擇「檢查元素」選項),它不顯示XYZ屬性。

回答

9

您需要注意的是,控件對象與其HTML表示之間存在區別。當您擴展dijit.form.Button時,xyz屬性會添加到窗口小部件類中,但不會自動添加到窗口小部件將呈現的HTML中。所以你的情況,如果你做

console.debug(dijit.byId("yourWidgetId").get("xyz")); 

..你會看到按鈕對象確實有XYZ成員,但HTML(就像你所指出的)沒有。

如果您還希望它在HTML中可見,則必須手動將其添加到按鈕的HTML呈現中。一種方法是將子類dijit.form.Button並覆蓋buildRendering方法。

dojo.declare("my.Button", dijit.form.Button, { 
    xyz: '', 
    buildRendering: function() { 
     this.inherited(arguments); 
     this.domNode.setAttribute("xyz", this.xyz); 
    } 
}); 

如果在HTML添加新的Button類的實例,比如:

<div dojoType="my.Button" xyz="foobar" id="mybtn"></div> 

..然後HTML表示(道場解析了它,並把它做成了好看的後小部件)將包含xyz屬性。可能是這樣的:

<span class="..." xyz="foobar" dir="ltr" widgetid="mybtn"> 
    <span class="..." dojoattachevent="ondijitclick:_onButtonClick"> 
    <input class="dijitOffScreen" type="button" dojoattachpoint="valueNode" ...> 
</span>