诡异的itemRender

最近在做项目时,碰到一些非常诡异的问题,全都是与组件的itemRender有关,郁闷了好半天,才解决了问题。

比如说在使用datagrid组件时,在某列中使用itemRender,如果itemRender中重写了data属性,那么你试图选中某行时(在使用itemRender列上点击),会选不中。如果去掉重写的data属性,就不会产生上面的问题。到底是什么具体的原因,目前还不太明白,希望有知道的指点一下。谢谢!

同样,是itemRender的惹的祸。在tileList组件中,使用了itemRender,在itemRender中,我同样重写了一下data属性,结果给我出现了一些奇异的问题。比如说,有些数据能显示,而有些不能,不能显示的地方出现空白区域。如果把重写的data属性去掉,就不会产生该问题。

以下是我重写的data属性代码:

private var _goods:Object;

[Bindable]
public function get goods():Object {
 return _goods;
}
public function set goods(value:Object):void {
 if (goods != value) {
  _goods = value;
 }
 return ;
}

 

override public function set data(value:Object):void {
 super.data = value;
 goods = value;
 return ;
}

我只是为了方便,所以重写了一下data属性,结果出现了上面的问题。

我查了相关的资料,发现Object对象是不能绑定的,原因它没有实现IEventDispatcher接口,因此在虚拟机编译时(如果使用了[Bindable]标签)生成事件绑定代码时,就会失败,也就不能派发事件了。所以就算你使用了[Bindable]标签也没有用。

可是让我百思不得其解的是,data同样是Object类型的,为什么它就可以呢,

最后我查看了它源码,才发现了其中的源由:

  [Bindable("dataChange")]
    [Inspectable(environment="none")]

    /**
     *  The <code>data</code> property lets you pass a value
     *  to the component when you use it in an item renderer or item editor.
     *  You typically use data binding to bind a field of the <code>data</code>
     *  property to a property of this component.
     *
     *  <p>You do not set this property in MXML.</p>
     *
     *  @default null
     *  @see mx.core.IDataRenderer
     */
    public function get data():Object
    {
        return _data;
    }
  public function set data(value:Object):void
    {
        _data = value;

        dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));

        invalidateDisplayList();
    }

在组件中的data属性中,派发了一个change事件,才使绑定成功的。
所以我修改一下上面的代码,也能解决不能全部显示的问题:

private var _goods:Object;

[Bindable("dataChanged")]
public function get goods():Object {
 return _goods;
}
public function set goods(value:Object):void {
 if (goods != value) {
  _goods = value;
  dispatchEvent(new Event("dataChanged"));
 }
 return ;
}
override public function set data(value:Object):void {
 super.data = value;
 goods = value;
 return ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值