Как использовать проверку dijit/Textarea (Dojo 1.9)?

У меня есть текстовое поле, которое является обязательным для заполнения. Я нашел сообщение, в котором говорится, что Dojo не имеет проверки для Textarea, но в Dojo 1.9 есть аргумент 'required'.

Я сделал следующее:

new Textarea({required:true, value:""}, query('[name=description]')[0])

но эффект не тот, который я ожидал. Техасская область всегда имеет красную рамку, даже если поле не было сфокусировано (в отличие, например, от ValidationTextBox). Но когда я звоню:

form.validate()

проверка пройдена, даже если texarea пуст.

Возможно ли заставить Textare вести себя так же, как в ValidationTextBox, или как сейчас, проверка для этого компонента еще не готова, и мне придется написать собственную версию (как в связанном посте) или ждать следующего Dojo?

3 ответа

Решение

Я сделал это, используя миксин SimpleTextArea и ValidationTextArea:

define(["dojo/_base/declare", "dojo/_base/lang", "dijit/form/SimpleTextarea", "dijit/form/ValidationTextBox"],
function(declare, lang, SimpleTextarea, ValidationTextBox) {

  return declare('dijit.form.ValidationTextArea', [SimpleTextarea, ValidationTextBox], {
    constructor: function(params){
      this.constraints = {};
      this.baseClass += ' dijitValidationTextArea';
    },    
    templateString: "<textarea ${!nameAttrSetting} data-dojo-attach-point='focusNode,containerNode,textbox' autocomplete='off'></textarea>"
  })
})

Смотрите также мой ответ в Dojo проверки текстовой области

Сила додзё заключается в том, чтобы с легкостью расширять его. Если вам действительно нужно required функциональность, а затем реализовать его. Если вы спроектируете это хорошо, не должно возникнуть никаких проблем, если оно действительно будет реализовано в новой версии Dojo.

Если вы действительно хотите узнать, существует ли такая функция или находится в стадии разработки, я предлагаю посмотреть на http://bugs.dojotoolkit.org/. Кроме того, вы всегда можете внести свой вклад в код, для этого и предназначен открытый исходный код.

Я хотел бы добавить к ответу Donaudampfschifffreizeitfahrt

вместо "this.baseClass += ' dijitValidationTextArea';"

я бы сделал

this.baseClass = this.baseClass.replace('dijitTextBox', 'dijitValidationTextArea');

так как

• нам не нужен класс TextBox, если у нас есть текстовый миксин

•! параметр "строки" смешивается, но не запускается / не разрабатывается, если присутствует класс TextBox...

Другие вопросы по тегам