Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 是否有任何方法可以向Actionscript中的非mxml组件添加valueCommit生命周期?_Apache Flex_Actionscript 3_Actionscript_Flex3 - Fatal编程技术网

Apache flex 是否有任何方法可以向Actionscript中的非mxml组件添加valueCommit生命周期?

Apache flex 是否有任何方法可以向Actionscript中的非mxml组件添加valueCommit生命周期?,apache-flex,actionscript-3,actionscript,flex3,Apache Flex,Actionscript 3,Actionscript,Flex3,根据我的经验,mxml组件使用的invalidate/commitProperties模型非常有用,我希望能够在actionscript应用程序的域模型对象中使用它。我如何才能将这样的生命周期事件添加到我的对象中?是否有全局对象生命周期管理器?Flex组件生命周期旨在处理用户界面组件的创建、销毁和其间的更改。一、 就个人而言,不要认为这种方法适合非用户界面组件 如果需要,可以在域模型对象中扩展UIComponent,然后将该域模型作为子对象添加到容器中。然后它将经历Flex组件生命周期验证阶段(

根据我的经验,mxml组件使用的invalidate/commitProperties模型非常有用,我希望能够在actionscript应用程序的域模型对象中使用它。我如何才能将这样的生命周期事件添加到我的对象中?是否有全局对象生命周期管理器?

Flex组件生命周期旨在处理用户界面组件的创建、销毁和其间的更改。一、 就个人而言,不要认为这种方法适合非用户界面组件

如果需要,可以在域模型对象中扩展UIComponent,然后将该域模型作为子对象添加到容器中。然后它将经历Flex组件生命周期验证阶段(commitProperties、updateDisplayList和measure)


但是,我不建议这样做

无效和提交属性未链接到MXML(您可以将其用作组件),但它链接到flex managedvisual组件生命周期(因为它们是唯一需要与flash逐帧渲染同步的组件)。因此,除非你谈论的是视觉组件,否则它不会开箱即用


但是,如果您希望为非可视类实现相同的机制,那么您应该首先实现IInvalidating()并创建一个机制,在需要进行验证时调用validateNow()函数。

正如Robert Bak所指出的,对于非UI组件,您基本上可以自己实现这种机制

我发现这是一种在模型类上使用的非常有用的技术,因为当您的模型类不是简单的数据传输对象时,它可以极大地减少绑定属性更新的“抖动”——也就是说,它们包含任何类型的多属性逻辑

因为我的用例是针对模型对象的,所以我不需要所有的IIN验证方法

以下是我的具体实现,作为您自己努力的起点。请注意,这来自于我们使用的名为RAFModel的“基本模型类”,这是用于Flex4SDK的

// 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();
        }
    }

}