Как создать уникальные идентификаторы в шаблоне виджета Dojo?

У меня есть виджет Dojo, который я пишу, который добавляет метку и окно ввода на пользовательскую страницу.

Атрибут for для label требует значения HTML-идентификатора, но виджет Dojo не должен содержать идентификаторы, если на одной странице создаются несколько экземпляров.

Итак, есть ли какие-либо предложения о том, как обойти эти конфликтующие потребности?

Ответ 1

Из окна, это то, как реестр диджета устанавливает WidgetID (this.id), если параметр конфигурации отсутствует при построении:

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

Шаблоны работают со строковыми заменами, поэтому, если у вас есть свойство в вашем классе, скажем foo, способ разместить это в шаблоне как таковой:

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

В вашем случае, где где-то в шаблоне есть пара входных данных label- > , это выглядит как

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

Итак,

Хотя это немного устарело на некоторое время, это очень хорошее место для начала: http://dojotoolkit.org/documentation/tutorials/1.6/templated/

Продолжить чтение механизма dojo.Stateful get/set

Наконец, вернитесь к dijit._WidgetsInTemplateMixin.