2010-01-26 57 views
1

現在我在Flex中有一個Accordion組件,它有兩個孩子,我想在完成實例化(在手風琴改變索引之後)時給孩子們引用我的應用程序模型。我在Flex中更新Accordion兒童的正確方法是什麼?

以下符號失敗,因爲該事件被觸發(accordionChange方法)後的孩子被實例化:

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

所以我已經現在做的是一個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); 
     } 
    } 

這讓我覺得笨拙,就像我錯過了Flex的一些關鍵部分。我很感激任何關於我應該怎麼做的建議,這似乎是對我來說重複出現的模式。

感謝,

回答

1

當您在MXML中聲明它們時,您可以將每個FaceInspector實例中的模型綁定在一起。

In you FaceInspector Class(AS3/code-behind),確保您的模型屬性是公共的並且可綁定的。

[Bindable] 
public var model:Model; 

然後,在您的主MXML(或聲明FaceInspector實例的任何位置)中,只需將模型屬性綁定到模型。

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

我希望這是你所追求的。另外,如果您的FaceInspector實例只需要訪問模型的特定屬性,那麼我會建議將這些屬性在Model類中綁定,並直接綁定它們。例如。

<pod:FaceInspector id="frontFaceInspector" currentIndex="{model.sceneIndex}" imageURL="{model.image_url}" /> 
0

您可以使用createpolicy的所有。在手風琴部分。

1

其實我總是看到使用事件監聽器和獲取對象做自己的工作,作爲Flex和AS的關鍵概念之一。我認爲你在做什麼很好,但是像杜萊說的你可以加

creationPolicy="all" 

你的手風琴,然後你可以開火你的onchange事件。
例如:

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

而且順便說一句,可能是笨拙的感覺給你的唯一原因是因爲它不是您最初着手做到這一點。我知道當我需要解決某些問題時,即使解決方案優於我的初衷,我總是覺得自己是個黑客。

相關問題