【发布时间】:2011-01-21 06:18:32
【问题描述】:
似乎无法绑定到自定义组件中的数据。我已经尝试过 BindUtilis 和 {},但似乎无法理解。这是我得到的:
我有一个可绑定的类 DataModel
在 Mainn.mxml 我有两个组件:DataGrid(用于测试)和 CustomComponent(扩展 Canvas)
当 DataModel.somelist 中的数据更新时,DataGrid 会反映更改,但 CustomComponent 不会出现。
每当 this._dataModel.itemList 更改时,我希望看到跟踪 (CustomComponent.dataProvider) 被触发。我究竟做错了什么?
Main.mxml 看起来像这样:
<mx:Script>
<![CDATA[
import model.DataModel;
[Bindable]
private var _dataModel:DataModel = DataModel.getInstance();
]]>
</mx:Script>
<mx:VBox width="100%" height="100%">
<views:ItemDisplayList width="100%" height="300" id="idl" >
<views:dataProvider>
{this._dataModel.itemList}
</views:dataProvider>
</views:ItemDisplayList>
<mx:DataGrid id="dg" width="100%" height="300" >
<mx:dataProvider>
{this._dataModel.itemList}
</mx:dataProvider>
</mx:DataGrid>
</mx:VBox>
CustomComponent 有这个 AS 类:
package code{
import model.DataModel;
import mx.containers.Canvas;
public class CustomComponent extends Canvas{
[Bindable]
private var _dataModel:DataModel = DataModel.getInstance();
private var _dataProvider:ArrayCollection ;
public function CustomComponent(){
super();
_dataProvider = new ArrayCollection();
trace("CustomComponent start");
}
public function get dataProvider() : ArrayCollection {
trace("get dataProvider");
return _dataProvider;
}
public function set dataProvider(value: ArrayCollection) : void {
trace("set dataProvider");
this._dataProvider = value;
invalidateProperties();
invalidateSize();
invalidateDisplayList();
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}
...
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number ) : void{
trace("updateDisplayList");
super.updateDisplayList(unscaledWidth, unscaledHeight);
}
}
}
【问题讨论】:
标签: apache-flex actionscript-3 binding components