代码之家  ›  专栏  ›  技术社区  ›  Jotham

用flex更新手风琴儿童的正确方法是什么?

  •  1
  • Jotham  · 技术社区  · 15 年前

    现在我在flex中有一个Accordion组件,它有两个孩子,我想在孩子们完成了他们的实例化(Accordion更改索引之后)之后,给他们一个对我的应用模型的引用。

    以下表示法对我来说失败,因为在触发事件后实例化了子级(AccordionChange方法):

    <mx:Accordion change="accordionChange(event)" > ...
    

    因此,我目前所做的是向每个Accordion子级添加一个CreationComplete,然后将其分配模型引用:

    <?xml version="1.0" encoding="utf-8"?>
    <pod:InspectorClass xmlns:pod="pod.*" xmlns:mx="http://www.adobe.com/2006/mxml" >
    <mx:Accordion id="accordion" color="0x323232" width="100%" height="100%">
        <mx:VBox label="Card Front" creationComplete="setChildModel()" >
            <pod:FaceInspector id="frontFaceInspector"/>
        </mx:VBox>
        <mx:VBox label="Card Back" creationComplete="setChildModel()" >
            <pod:FaceInspector id="backFaceInspector"/>
    ...
    

    我的“代码隐藏”类InspectorClass包含一个如下所示的方法:

        public function setChildModel():void
        {
            if ( accordion.selectedIndex == 0 )
            {
                frontFaceInspector.setModel(model);
            }
            else if ( accordion.selectedIndex == 1 )
            {
                backFaceInspector.setModel(model);
            }
        }
    

    这让我觉得很笨拙,好像我错过了灵活的关键部分。对于我应该如何做这件事,我会很感激任何建议,对我来说,这似乎是一个反复出现的模式。

    谢谢,

    3 回复  |  直到 15 年前
        1
  •  1
  •   Adam Harte    15 年前

    当您在MXML中声明模型时,您可以在每个FaceInspector实例中绑定模型。

    在你身上 FaceInspector类 (as3/code-behind),确保您的模型属性是公共的和可绑定的。

    [Bindable]
    public var model:Model;
    

    然后在主MXML中(或者在任何地方声明faceInspector实例),只需将模型属性绑定到模型。

    <pod:FaceInspector id="frontFaceInspector" model="{model}" />
    

    我希望这就是你想要的。

    另外,如果FaceInspector实例只需要访问模型的特定属性,那么我建议将这些属性设置为可绑定在模型类中,并直接绑定它们。例如。

    <pod:FaceInspector id="frontFaceInspector" currentIndex="{model.sceneIndex}" imageURL="{model.image_url}" />
    
        2
  •  1
  •   invertedSpear    15 年前

    实际上,我经常看到使用事件监听器和让对象做他们自己的工作,这是flex和as的关键概念之一。我觉得你做的很好,但就像杜里说的,你可以补充

    creationPolicy="all"
    

    你的手风琴,然后你可以启动你的onchange活动。
    前任:

    <mx:Accordion id="accordion" color="0x323232" width="100%" height="100%" creationPolicy="all" change="accordionChange(event)">
    

    顺便说一句,也许唯一让你觉得笨拙的原因是因为这不是你最初开始做的。我知道,当我必须围绕某件事情工作时,我总是觉得自己像个黑客,即使这种工作环境比我的初衷优越。

        3
  •  0
  •   Durai    15 年前

    您可以使用createpolicy作为全部。手风琴部分。

    推荐文章