Как принудительно выполнить проверку Flex при отображении контейнера
-
20-09-2019 - |
Вопрос
У меня есть приложение Flex 3 с представлением в стеке представлений, и это представление необходимо создавать только по запросу.Я объявил валидаторы для каждого элемента управления в представлении и создал метод checkAllValid(), который запускает Validator.validateAll().Это прекрасно работает, когда я на самом деле использую элементы управления (используя события изменения или фокуса), но как я могу заставить checkAllValid() запускаться, когда представление впервые отображается пользователю, чтобы им сразу же показывалось то, что недействительно один раз? данные заполняются в элементах управления?
Я пробовал поместить вызов в различные события самого представления (например,CreationComplete, updateComplete, show, active и т. д.), но при запуске приложения всегда отображается следующая ошибка:
«Атрибут источника должен быть указан вместе с атрибутом свойства».
Я также попытался установить для параметра CreationPolicy в представлении значение «все», но это не помогает.
Некоторые валидаторы активируются только тогда, когда форма находится в определенном состоянии, но я устранил это как потенциальную проблему, закомментировав все мои валидаторы, кроме этого самого простого:
<mx:Array id="validators"><mx:StringValidator id="val_Address1" source="{Address1}" property="text" required="true" triggerEvent=""/></mx:Array>
Метод checkAllValid() очень прост:
private function checkAllValid():void{
var validationErrors: Array = Validator.validateAll(validators);
}
Я также пробовал напрямую вызывать один валидатор вместо использования validateAll, и результат тот же.
Пожалуйста помоги!Должен быть способ заставить представление проверяться при его отображении....
(кстати, это в рамках Cairngorm MVC, и у меня есть данные, привязанные к элементам управления)
Решение
Понятно!Я добавил аналогичные валидаторы в другое представление, и они работали нормально.В чем разница?Метод, вызывавший checkAllValid(), вызывался при событии CreationComplete объекта внутренний контейнер - не основной компонент представления.
Так что, в конце концов, это не имело ничего общего с самой проверкой - просто я не до конца понимал порядок создания.
Я оставлю этот вопрос здесь на тот случай, если кто-то столкнется с аналогичной проблемой с порядком создания.