Как отметил Роберт Бак, вы по сути самостоятельно можете внедрить такой механизм для компонентов без пользовательского интерфейса.
Я обнаружил, что этот метод очень полезен для использования в классах моделей, поскольку он может значительно уменьшить «порчу» обновлений связанных свойств, когда классы модели не являются простыми объектами передачи данных - т.е. логика собственности, заключенная в них.
Поскольку мой вариант использования предназначен для объектов модели, мне не нужны были все методы IInvalidating.
Вот моя конкретная реализация в качестве отправной точки для ваших собственных усилий. Обратите внимание, что это происходит из «базового класса модели», который мы используем под названием RAFModel, и что это для Flex 4 SDK.
// INVALIDATION AND COMMITPROPERTIES PATTERN
private var invalidatePropertiesFlag:Boolean;
public function invalidateProperties():void
{
if (!invalidatePropertiesFlag)
{
invalidatePropertiesFlag = true;
invalidateModelObject(this);
}
}
protected function commitProperties():void
{
// override this
}
// -- INVALIDATION SUPPORT
public static var invalidObjects:Dictionary = new Dictionary(true);
public static var validatePending:Boolean = false;
public static function invalidateModelObject(obj:RAFModel):void
{
invalidObjects[obj] = true;
if (!validatePending)
{
validatePending = true;
FlexGlobals.topLevelApplication.callLater(validateObjects);
}
}
protected static function validateObjects():void
{
var invalidQueue:Dictionary = invalidObjects;
// start a fresh tracker for further invalidations
// that are a side effect of this pass
invalidObjects = new Dictionary(true);
// ready to receive another call
validatePending = false;
for (var o:* in invalidQueue)
{
var rm:RAFModel = o as RAFModel;
if (rm)
{
// clear the flag first, in case we're reentrant
// on any given instance
rm.invalidatePropertiesFlag = false;
rm.commitProperties();
}
}
}