пользовательский валидатор для удаленного объекта - PullRequest
3 голосов
/ 20 октября 2010

Мне нужно проверить поле в нашей базе данных, чтобы проверить уникальность.Мне кажется, что проблема в том, что валидаторы doValidation () завершают работу до того, как мы получим ответ из базы данных.

Как я могу заставить валидатор ждать, пока он вернет свою полезную нагрузку, до тех пор, пока мы не получим информацию из БД?

Или, возможно, может быть лучше вопрос (поскольку я думаю, что первый вопрос невозможен)Как я могу настроить это по-другому, чтобы мне не нужно было ждать, или чтобы ожидание не приводило к тому, что проверка автоматически возвращала действительный?

Ответы [ 3 ]

1 голос
/ 20 октября 2010

Если вы используете удаленный объект, вы можете указать вызов метода внутри вашего удаленного объявления и назначить функцию для результата вызова. Вызов результата запускается только после того, как удаленный сервер что-то возвращает, поэтому он не будет запущен до вашей проверки.

Сделайте ваш проверочный вызов в упомянутом вызове функции результата (который вы должны будете создать), и у вас все получится. Ваш код должен выглядеть примерно так:

<s:RemoteObject id="employeeService"
  destination="ColdFusion"
  source="f4iaw100.remoteData.employeeData"
  endpoint="http://adobetes.com/flex2gateway/"
  result="employeeService_resultHandler(event)"/>
    **<s:method name="dataCheckCall" result="dataCheckResult(event)"/>**
<s:RemoteObject />

А в вашем скрипте:

function protected dataCheckResult(event:ResultEvent):void {
  **doValidate();**
}

Редактировать: Как только вы вызовете «dataCheckCall», метод начнет работать. Если по какой-либо причине вы хотите вызвать это WITHIN для вашего валидатора, вы можете сделать это, и тогда dataCheckResult будет запускаться всякий раз, когда он возвращается с полезной нагрузкой (притворяется, что doValidate вызывается в другом месте). Я также оставил сообщение ниже.

0 голосов
/ 27 октября 2010

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

Затем я использовал обработчик события 'keyUp', чтобы выделить часть поиска в базе данных. Тем временем я установил строковую переменную, которая будет действовать как своего рода флаг, который будет помечен как «обработка». Когда срабатывает ответное событие, я проверю его содержимое и либо уберу флаг, либо установлю для него какую-то другую ошибку.

Затем я создал новый EmptyStringValidator, который проверит содержимое этого флага и выполнит свою работу соответствующим образом.

Это косвенный, но, похоже, пока работает.

0 голосов
/ 21 октября 2010

Вы пытаетесь встроить асинхронный процесс (извлечение данных из БД) в синхронный процесс (проверка всех валидаторов по очереди).

Это не сработает ...

Вам нужно будет либо развернуть собственную платформу валидатора, либо использовать другой метод определения законности ваших элементов управления.

PS В любом случае валидаторы MX - это мусор!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...