Flex乱渲染问题 最新解决方案

flex List渲染总出现 乱渲染问题。

给渲染器内部元素如果 直接{data.name}等等赋值时没问题。但一般情况,赋值是要根据条件判断的。 因此原来是在creationComplete=“init()” 实现。这样虽然达到渲染效果了,但会导致 滚动条下拉时 乱渲染问题。 没办法,百度 google 都没有解决方法。自己看他所有的 事件,突然发现 dataChange。 结果 成功了。不管怎么样 只要数据源值发生变化,渲染 就随着变化。这个棘手的问题。。。突然解决了。

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="45" verticalScrollPolicy="off"
dataChange="init()"
>
<mx:Script>
<![CDATA[
import org.as3commons.bytecode.abc.Integer;
import com.clbus.core.Utils;
import com.clbus.core.SharedObjectHelper;
import com.clbus.control.ChatWindow;
import com.clbus.bean.member.Member;
import com.clbus.bean.member.Friend;
import com.clbus.bean.member.Group;

/**
*
*
* */
public function init():void{
var transObj:Member =data as Member;
if(transObj!=null){
var nickName:String=transObj.nickName;
var loginName:String=transObj.loginName;
//昵称为空显示用户名
if(Utils.ifNull(nickName)){
nameLabel.text=loginName;
}
//昵称不为空 显示昵称(用户名)
else{
nameLabel.text=nickName+"("+loginName+")";
}

//签名
if(transObj.sign!=null){
signatureLabel.text=transObj.sign;
}else{
signatureLabel.text="未设置签名";
}
nameLabel.toolTip=nameLabel.text;
signatureLabel.toolTip=signatureLabel.text;
}


initRightMenu();

}
private function a():void{
trace("aaaaaaaa");
}
private function initRightMenu():void{
//好友项右键面板
var listContextMenu:ContextMenu=new ContextMenu();
listContextMenu.clipboardMenu=false;
listContextMenu.hideBuiltInItems();
listContextMenu

//好友分组
var moveItem:ContextMenuItem=new ContextMenuItem("好友分组", true);
moveItem.name="delFriend";
moveItem.addEventListener(Event.SELECT,function():void{
var bathPath:String=Utils.configProperty.webServerPath;
var toServiceBasePath:String=bathPath+"/openLink.htm?r=";
var parames="&loginName="+SharedObjectHelper.currentLoginName+"&ssoId="+SharedObjectHelper.currentUUId;
var url:String=toServiceBasePath+bathPath+"/member/friend/list.htm"+parames;
navigateToURL(new URLRequest(url),"_blank");
});


//查看好友资料
var viewItem:ContextMenuItem=new ContextMenuItem("好友资料", true);
viewItem.name="viewFriend";
viewItem.addEventListener(Event.SELECT,function():void{
//获得当前好友的Id
var currentId:Number=data.id;
var bathPath:String=Utils.configProperty.webServerPath;
var toServiceBasePath:String=bathPath+"/openLink.htm?r=";
var parames="&loginName="+SharedObjectHelper.currentLoginName+"&ssoId="+SharedObjectHelper.currentUUId;
var url:String=toServiceBasePath+bathPath+"/member/view.htm?id='"+currentId+"'"+parames;
navigateToURL(new URLRequest(url),"_blank");
});

listContextMenu.customItems=[viewItem,moveItem]
image.contextMenu=listContextMenu;
nameLabel.contextMenu=listContextMenu;
signatureLabel.contextMenu=listContextMenu;
}

]]>
</mx:Script>
<mx:Canvas width="60" height="100%" >
<mx:Image id="image" verticalAlign="middle" top="1" left="5" verticalCenter="0" source="{data.photo}" width="98%" height="100%"/>
</mx:Canvas>
<mx:VBox width="70%" height="100%" textAlign="left" verticalAlign="top" verticalGap="0" verticalScrollPosition="0" >
<mx:Text id="nameLabel" width="100%" height="22" fontWeight="bold" fontSize="12" selectable="false" />
<mx:Text id="signatureLabel" width="100%" height="23" fontSize="12" selectable="false" />
</mx:VBox>
</mx:HBox>

你可能感兴趣的:(Flex)