如何在Dojo小部件模板中创建唯一ID?

如何在Dojo小部件模板中创建唯一ID?,dojo,widget,Dojo,Widget,我正在编写一个Dojo小部件,它向用户页面添加了一个标签和一个输入框 标签的for属性需要一个HTML ID值,但是Dojo小部件不应该包含ID,以防在同一页面上创建多个实例 那么,有人对如何解决这些冲突需求有什么建议吗?开箱即用,如果构造时配置参数不存在,dijit注册表就是这样设置WidgetID(this.id): constructor: function(args) { args=args || {}; this.id = args.id || dijit.registry.get

我正在编写一个Dojo小部件,它向用户页面添加了一个标签和一个输入框

标签的
for
属性需要一个HTML ID值,但是Dojo小部件不应该包含ID,以防在同一页面上创建多个实例


那么,有人对如何解决这些冲突需求有什么建议吗?

开箱即用,如果构造时配置参数不存在,dijit注册表就是这样设置WidgetID(this.id):

constructor: function(args) { args=args || {};
  this.id = args.id || dijit.registry.getUniqueId(this.declaredClass)
}
模板与字符串替换一起工作,因此如果类中有属性,例如foo,则将其放入模板的方法如下:

templateString = '<div class="${foo}">';
templateString='';
在您的例子中,模板中的某个地方有一个label->input对,它是这样的

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

标题
所以

尽管它暂时有点过时,但这是一个非常好的起点:

继续阅读
dojo.Stateful
get/set机制


最后转到dijit.u WidgetsInTemplateMixin

只是提醒一下:似乎只需要在模板中引用${id}就可以了。widget的所有生命周期方法中都没有额外的代码。如前所述,“开箱即用”:)第一个代码块是dijit.widget自动将其id设置为的