Apache flex 如何在ActionScript类中实现数据绑定?
我的ActionScript组件中的绑定值有问题。我基本上希望将组件中变量的值设置为模型中的值,并在更新模型值时自动更新组件变量。我想我只是不完全理解Flex中数据绑定的工作原理——这在使用MXML组件时不是问题,但在使用ActionScript类时,绑定不起作用 这是我正在使用的代码,其中的值没有绑定:Apache flex 如何在ActionScript类中实现数据绑定?,apache-flex,data-binding,actionscript,mxml,cairngorm,Apache Flex,Data Binding,Actionscript,Mxml,Cairngorm,我的ActionScript组件中的绑定值有问题。我基本上希望将组件中变量的值设置为模型中的值,并在更新模型值时自动更新组件变量。我想我只是不完全理解Flex中数据绑定的工作原理——这在使用MXML组件时不是问题,但在使用ActionScript类时,绑定不起作用 这是我正在使用的代码,其中的值没有绑定: package { public class Type1Lists extends TwoLists { public function Type1Lists(
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>
包
{
公共类Type1List扩展了两个列表
{
公共功能类型1列表()
{
超级();
super.availablentities=super.composite.availabletype1实体;
super.selectedEntities=super.composite.selectedType1实体;
}
}
}
包裹
{
公共类Type2List扩展了两个列表
{
公共函数Type2Lists()
{
超级();
super.availablentities=super.composite.availabletype2实体;
super.selectedEntities=super.composite.selectedType2Entities;
}
}
}
/*TwoList.mxml*/
要使用代码绑定,应使用mx.binding.utils*
看看BindingUtils.bindProperty和bindSetter方法
另外,要小心手动数据绑定,它可能会导致内存泄漏。
要避免这些问题,请保存bindProperty和bindSetter返回的ChangeWatcher,并在不再使用时调用watcher的unwatch方法(即,在dipose或destructor方法中)您需要将[Bindable]标记添加到类本身(使所有属性都可绑定)或您想要成为[Bindable]的属性。在MXML中将属性或对象标记为[Bindable]是不够的。为了解决这个问题,我只是将类转换为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>
/*Type1Lists.mxml*/
/*Type2Lists.mxml*/