2008-12-22 70 views
2

我在ActionScript組件中綁定值時遇到問題。我基本上想要將組件中的變量值設置爲模型中的值,並且在模型值更新時讓組件變量自動更新。我認爲我只是不完全理解Flex中的數據綁定是如何工作的 - 在使用MXML組件時這不是問題,但是在使用ActionScript類時,綁定不起作用。如何在ActionScript類中實現數據綁定?

這是我使用的代碼,其中的值並不具有約束力。

package 
{ 
    public class Type1Lists extends TwoLists 
    { 
     public function Type1Lists() 
     { 
      super(); 

      super.availableEntities = super.composite.availableType1Entities; 

      super.selectedEntities = super.composite.selectedType1Entities; 
     } 
    } 
} 

package 
{ 
    public class Type2Lists extends TwoLists 
    { 
     public function Type2Lists() 
     { 
      super(); 

      super.availableEntities = super.composite.availableType2Entities; 

      super.selectedEntities = super.composite.selectedType2Entities; 
     } 
    } 
} 

/* TwoLists.mxml */ 
<?xml version="1.0" encoding="utf-8"?> 
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"> 
    <mx:Script> 
     <![CDATA[ 
      public var __model:ModelLocator = ModelLocator.getInstance(); 

      public var composite:Composite = 
       __model.selectedComposite; 

      [Bindable] 
      public var availableEntities:ArrayCollection; 

      [Bindable] 
      public var selectedEntities:ArrayCollection; 
     ]]> 
    </mx:Script> 

    <mx:List id="availableEntitiesList" dataProvider="{availableEntities}" /> 

    <mx:List id="selectedEntitiesList" dataProvider="{selectedEntities}" /> 
</mx:HBox> 

回答

1

要解決這個問題,我只需將類轉換爲MXML組件,然後爲我的ModelLocator添加一個私有變量。

/* Type1Lists.mxml */ 
<?xml version="1.0" encoding="utf-8"?> 
<TwoLists xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns="*" 
    availableEntities="{__model.selectedComposite.availableType1Entities}" 
    selectedEntities="{__model.selectedComposite.selectedType1Entities}"> 
    <mx:Script> 
     <![CDATA[ 
      import model.ModelLocator; 

      [Bindable] 
      private var __model:ModelLocator = ModelLocator.getInstance(); 
    </mx:Script> 
</TwoLists> 

/* Type2Lists.mxml */ 
<?xml version="1.0" encoding="utf-8"?> 
<TwoLists xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns="*" 
    availableEntities="{__model.selectedComposite.availableType2Entities}" 
    selectedEntities="{__model.selectedComposite.selectedType2Entities}"> 
    <mx:Script> 
     <![CDATA[ 
      import model.ModelLocator; 

      [Bindable] 
      private var __model:ModelLocator = ModelLocator.getInstance(); 
    </mx:Script> 
</TwoLists> 
2

要使用的代碼,你應該使用mx.binding.utils綁定*

看一看, BindingUtils.bindProperty和bindSetter方法。

另外,小心手動數據綁定,它可能會導致你內存泄漏。 爲了避免這些,節省bindProperty和bindSetter返回返回ChangeWatcher並調用觀察者的取消監視方法時,沒有更多的使用(即,在dipose或析構函數)

1

您需要將[綁定]標記添加要麼類本身(使所有屬性可綁定)或您想要的屬性[Bindable]。在MXML中將屬性或對象標記爲[Bindable]是不夠的。

+0

這是此問題的正確答案。 – HDave 2011-10-19 13:24:41

相關問題