문제

액션 스크립트 구성 요소의 바인딩 값에 문제가 있습니다. 기본적으로 컴포넌트의 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>
도움이 되었습니까?

해결책 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를 사용해야합니다.*

BindingUtil.BindProperty 및 BindSetter 방법을 살펴보십시오.

또한 수동 데이터베이닝에주의하면 메모리 누출로 이어질 수 있습니다. 그것들을 피하기 위해 BindProperty 및 BindSetter가 반환 한 ChangeWatcher를 저장하고 더 이상 사용되지 않을 때는 Watcher의 UNKATH 메서드를 호출하십시오 (즉, 쌍극자 또는 파괴자 방법).

bindable] 태그를 클래스 자체 (모든 속성을 바인딩 가능하게 만드는) 또는 [Bindable]가 원하는 속성을 추가해야합니다. MXML에서 속성 또는 물체를 [바인딩 가능한] 마킹로는 충분하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top