2012-06-24 33 views
10

我有一個我正在寫的Dojo小部件,它爲用戶的頁面添加了一個標籤和一個輸入框。如何在Dojo小部件模板中創建唯一ID?

labelfor屬性需要HTML ID值,但Dojo窗口小部件不應包含ID,以防在同一頁面上創建多個實例。

那麼,有沒有人有任何建議如何解決這些衝突的需求?

回答

19

開箱即用,這是dijit的註冊表設置如何爲widgetid(this.id)如果配置參數不存在邊建設邊:

constructor: function(args) { args=args || {}; 
    this.id = args.id || dijit.registry.getUniqueId(this.declaredClass) 
} 

模板用字符串替換工作,所以如果你有一個屬性在你的類,說FOO,順便把這個模板是這樣的:

templateString = '<div class="${foo}">'; 

在你的情況下,如果某個模板你人abel->輸入對,它是這樣的

<div><!--domNode--> 
    <table> 
     <td><label for="${id}-edit-title">Title</label></td> 
     <td><input id="${id}-edit-title" type="text" /></td> 
    </table> 
</div> 

所以

Allthough它是一點點過時的時間之中,這是一個非常良好的開端: http://dojotoolkit.org/documentation/tutorials/1.6/templated/

繼續閱讀dojo.Stateful get/set機制

最後轉到dijit._WidgetsInTemplateMixin

+1

只是一個頭:似乎引用模板中的$ {id}是所有需要做的事情。沒有任何額外的代碼沒有任何部件的生命週期方法。 – belzebu

+0

如上所述,'out the box':)第一個代碼塊是dijit.widget將它設置爲id的自動 – mschr