Как связать валидатор свойства с формой валидатора виджетов? - PullRequest
0 голосов
/ 24 марта 2019

Я сделал этот пример, чтобы показать, чего я пытаюсь достичь http: // tinyurl.com/y6y9xxt4.Введите что-нибудь в текстовое поле и затем щелкните в любом месте за пределами, чтобы активировать привязку.

У меня есть класс demo.Communicator, у которого есть свойство с именем url.Это свойство проверяется с помощью validate: qx.util.Validate.url(), в строке 7

qx.Class.define("demo.Communicator",{
  extend: qx.core.Object,

  properties: {
    url: {
      check: "String",
      validate: qx.util.Validate.url(),
      event: "changeUrl",
      init: null
    }
  },

  members:{}
});

В строке 24 я связываю changeValue событие qx.ui.form.TextField со свойством url объекта demo.Communicator.

textField.bind("changeValue", communicator, "url", {
  onUpdate: function() {
    textField.setValid(true);
  },
  onSetFail: function(e) {
    textField.setValid(false);
    textField.setInvalidMessage(e.toString());
  }
});

Если средство проверки свойства url проверяет значение, поступающее из TextBox, оно обновляет свойство, а обратный вызов onUpdate устанавливает textField в valid.Если валидатор не проверяет, то свойство не обновляется, и обратный вызов onSetFail устанавливает textField в недопустимое значение.

Есть ли способ привязать статус проверки из свойства в textField без использования этих обратных вызовов?Если свойство не проверено, textField должно быть автоматически установлено недействительным, а если оно подтверждено, textField должно измениться на действительное.

Я знаю, что я мог бы присоединить qx.util.Validate.url() кtextField также.К сожалению, это привело бы ко второму источнику правды, и это не выглядит красиво.

...