首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法将valueCommit生命周期添加到Actionscript中的非mxml组件?

有没有办法将valueCommit生命周期添加到Actionscript中的非mxml组件?
EN

Stack Overflow用户
提问于 2010-07-06 23:01:55
回答 3查看 445关注 0票数 1

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-07 09:29:29

正如Robert Bak所指出的,为非UI组件实现这样一种机制基本上是您自己的事。

我发现这是一个在模型类上使用的非常有用的技术,因为当你的模型类不是简单的数据传输对象时,它可以极大地减少绑定属性更新的“颠簸”--也就是说,它们内部封装了任何类型的多属性逻辑。

因为我的用例是模型对象,所以我不需要IInvalidating的所有方法。

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

代码语言:javascript
复制
// 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();
        }
    }

}
票数 1
EN

Stack Overflow用户

发布于 2010-07-06 23:21:39

无效和commitProperties没有链接到MXML (您可以将其与组件一起使用),但它链接到了flex visual组件生命周期(因为它们是唯一需要与flash逐帧渲染同步的组件)。因此,除非你谈论的是可视化组件,否则它不会开箱即用。

但是,如果您希望为非可视化类实现相同的机制,则可能应该从实现IInvalidating (docs)开始,并创建一种在需要完成验证时调用validateNow()函数的机制。

票数 1
EN

Stack Overflow用户

发布于 2010-07-06 23:20:34

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

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

但是,我不推荐这种方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3187417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档