2012-06-24 31 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