2009-09-03 93 views
1

我有兩個組件。一個被稱爲「InsideComp」,另一個被稱爲「OutsideComp」。 OutsideComp將InsideComp作爲其組件的一部分,並且在我的主MXML文件中嵌入了OutsideComp的一個實例。如何在我的主MXML文件中訪問InsideComp的公共變量?Flex - 如何訪問MXML中另一個組件內的組件?

在Actionscript中,我可以這樣做: OutsideComp.InsideComp.valToChange = 5;

但我不知道如何在MXML中做到這一點。我知道這可能是一個簡單的問題。

回答

4

通過設置MXML組件的ID屬性,可以使其成爲可通過點符號訪問的公共屬性。 「通過MXML訪問它」是一個狡猾的問題。您可以在xml標籤中使用綁定符號並將該屬性綁定到另一個屬性,或者您可以以正常的AS3方式在腳本塊中訪問它。

+0

你是說我應該在我的OuterComp中創建代碼來將它的屬性綁定到InnerComp的屬性?這是我正在考慮的路線,但似乎並不是最好的選擇(認爲可能有更好的方法來做到這一點) – Seidleroni 2009-09-03 14:44:14

+0

幾乎總是有一個更好的做法,但我以前使用過這種模式。 InnerComp擁有一個綁定在OuterComp中的屬性,爲您提供對該屬性的便捷頂級訪問。它將組件緊密結合在一起,實質上使它們成爲單個組件,但它很有用。 – 2009-09-03 14:51:54

+0

這樣做並不會在應用程序中造成「負擔」?它不會比其他方法放慢應用程序的速度? – Seidleroni 2009-09-03 14:59:03

2

我在此處更新代碼以包含對外部類的引用。我不是100%肯定這是你在找什麼,但我會盡我所能,給你一個

在OuterClass:

<?xml version="1.0" encoding="utf-8"?> 
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*"> 
    <local:InnerClass id="inner" width="100%" height="100%" /> 
</mx:VBox> 

將InnerClass:

<?xml version="1.0" encoding="utf-8"?> 
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"> 
    <mx:CheckBox id="innerCheckbox" selected="true" /> 
</mx:VBox> 

編輯:這裏的應用

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="horizontal" xmlns:local="*"> 

    <mx:Binding source="{outer.inner.innerCheckbox.selected.toString()}" 
       destination="checkLabel.text" /> 
    <mx:Label id="checkLabel" /> 
    <local:OuterClass id="outer" width="100%" height="100%" /> 
</mx:Application> 

這裏的更新版本是什麼這樣做一個簡要說明:

  1. 有3個MXML文件:

    • 在OuterClass:一個MXML文件,其中包含將InnerClass
    • 將InnerClass:它包含一個複選框
    • 應用MXML文件:其中包含在主應用程序OuterClass
  2. 在主應用程序中有一個綁定,該應用程序需要複選框值(通過Object hier archy)並適當地設置標籤的文本字段。這就像ActionScript一樣工作:用。運算符來訪問嵌套對象。

  3. 當複選框更新時,標籤的值會相應更新。

希望這可以讓事情變得更清楚。

+0

我沒有看到你在這個例子中訪問'OutsideComp'。看起來你只是嵌入了InnterComp。是對的嗎? – Seidleroni 2009-09-03 14:43:04

+0

如果您仍在處理此問題(如果您不感興趣,請不要擔心 - 我只是想幫助:),請參閱最新的編輯。 – bedwyr 2009-09-03 16:07:29

0

我認爲最直接的回答方法是使用腳本標籤。這將允許您運行您熟悉的AS。首先,您需要爲每個要編輯的屬性分配ID。

<mx:Script> 
    private function onCreationComplete (event:Event):void { 
    idOfTheOutsideComp.idOfTheInsideComp.propertyName = newValue; 
    } 
</mx:Script> 

我把這段代碼創建一個完整的處理程序裏面,因爲你不能簡單地運行從腳本標籤內的代碼,它需要一個函數中運行。

相關問題