ActionScript 클래스에서 데이터 바인딩을 어떻게 구현합니까?
-
23-08-2019 - |
문제
액션 스크립트 구성 요소의 바인딩 값에 문제가 있습니다. 기본적으로 컴포넌트의 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에서 속성 또는 물체를 [바인딩 가능한] 마킹로는 충분하지 않습니다.
제휴하지 않습니다 StackOverflow