どのように私は、ActionScriptクラスのデータバインディングを実装していますか?

StackOverflow https://stackoverflow.com/questions/386506

質問

私は私のActionScriptコンポーネントの値を結合して、問題が生じています。私は基本的にモデル値が更新されたときに自動的に更新され、モデル内の値に私のコンポーネントに変数の値を設定し、コンポーネント変数を持っていると思います。 ActionScriptクラスを使用した場合、バインディングが動作しない、MXMLコンポーネントを使用している場合、これは問題ではありませんが、

- 私はちょうど完全にデータをFlexで作品を結合する方法を理解していないと思います。

これは、値が結合されていない私が使用しているコードは、次のとおりです。

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>
役に立ちましたか?

解決 3

この問題を解決するために、私は単純に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>

他のヒント

あなたはmx.binding.utilsを使用する必要があるコードでバインディングを使用するには。*

外観とBindingUtils.bindPropertyとbindSetter方法を取ります。

また、それはメモリリークにあなたを導くことができ、手動でデータバインディングに注意してください。 これ以上使用されているときにそれらを避けるために、は、bindPropertyとbindSetterとコールウォッチャーのunwatchメソッドによって返さはChangeWatcherを保存していない(すなわち、破棄して下さいまたはデストラクタメソッド内)

あなたはクラス自体(すべてのプロパティがバインド可能にする)か、[バインド可能]になりたいプロパティのいずれかに[Bindable]タグを追加する必要があります。 [バインド可能]あなたのMXMLでは十分ではないとして、プロパティまたはオブジェクトをマーキングます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top