flex 移除dataprovider里的项目时,ItemRenderer set方法传值为null

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init(event)">
<s:layout>
<s:VerticalLayout/>
</s:layout>
<fx:Script>
<![CDATA[
import com.crap.vo.Teacher;

import mx.collections.ArrayCollection;
import mx.events.FlexEvent;

[Bindable]
private var teacherAC:ArrayCollection=new ArrayCollection();

protected function init(event:FlexEvent):void
{
var teacher:Teacher=new Teacher();
teacher.name="name1";
teacherAC.addItem(teacher);

teacher=new Teacher();
teacher.name="name2";
teacherAC.addItem(teacher);
}

protected function bar(event:MouseEvent):void
{
teacherAC.removeItemAt(0);
}

]]>
</fx:Script>
<s:Button click="bar(event)" label="abc"/>
<s:DataGroup dataProvider="{teacherAC}">
<s:itemRenderer>
<fx:Component>
<s:ItemRenderer>
<fx:Script>
<![CDATA[
public override function set data(data:Object):void{
trace(data);
}
]]>
</fx:Script>
</s:ItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:DataGroup>
</s:Application>


上面代码中,当点击了按钮以后,DataGroup的dataProvider的ArrayCollection少了一个项目,这样会触发DataGroup的itemRemoved方法,
里面有

if (oldRenderer is IDataRenderer && oldRenderer !== item)
IDataRenderer(oldRenderer).data = null;

这样就是向ItemRenderer的data setter中传了一个null,不注意的情况下,很容易抛空指针异常.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值