2

ActionScript コンポーネントでの値のバインドに問題があります。私は基本的に、コンポーネントの aa 変数の値をモデルの値に設定し、モデルの値が更新されるとコンポーネント変数を自動的に更新したいと考えています。Flex でデータ バインディングがどのように機能するかを完全には理解していないと思います。これは、MXML コンポーネントを使用する場合は問題ありませんが、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>
4

3 に答える 3

2

コードによるバインディングを使用するには、mx.binding.utils。*を使用する必要があります

BindingUtils.bindPropertyメソッドとbindSetterメソッドを確認してください。

また、手動のデータバインディングには注意してください。メモリリークが発生する可能性があります。それらを回避するには、bindPropertyとbindSetterによって返されたChangeWatcherを保存し、使用されなくなったときに(つまり、diposeまたはdestructorメソッドで)watcherのunwatchメソッドを呼び出します。

于 2008-12-22T16:03:21.343 に答える
1

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

于 2008-12-22T16:18:14.277 に答える
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>
于 2009-01-23T22:27:29.023 に答える