Apache flex 在flex数据网格中使用图像项渲染
我试图在flex中向datagrid项动态渲染添加图像 这是我的DataGrid代码 getImagePath函数中的“str”值正确Apache flex 在flex数据网格中使用图像项渲染,apache-flex,image,datagrid,itemrenderer,Apache Flex,Image,Datagrid,Itemrenderer,我试图在flex中向datagrid项动态渲染添加图像 这是我的DataGrid代码 getImagePath函数中的“str”值正确 <?xml version="1.0" encoding="utf-8"?> <mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml" doubleClickEnabled="true"> <mx:Script> <![
<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml"
doubleClickEnabled="true">
<mx:Script>
<![CDATA[
private function userLabelFunction(item:Object, column:DataGridColumn):String
{
return item.user.username;
}
private function getImagePath(item:Object, column:DataGridColumn):String
{
var str:String=item.track["artwork-url"]
if (str == "")
{
str=item.user["avatar-url"];
}
return str;
}
]]>
</mx:Script>
<mx:columns>
<mx:DataGridColumn dataField="artwork-url"
headerText="Art"
itemRenderer="components.content.contents.datagrids.ImageRenderer"
labelFunction="getImagePath"/>
<mx:DataGridColumn dataField="title"
headerText="Title"
minWidth="100"/>
<mx:DataGridColumn dataField="user"
headerText="User"
labelFunction="userLabelFunction"/>
<mx:DataGridColumn dataField="bpm"
headerText="BPM"/>
</mx:columns>
</mx:DataGrid>
我无法将该图像url值输入到我的项目渲染器中
我尝试过像这样重写set data属性
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
height="60"
verticalAlign="top"
creationComplete="init()">
<mx:Script>
<![CDATA[
import components.content.contents.containers.ContentContainerSoundCloud;
import mx.core.Application;
import mx.controls.dataGridClasses.DataGridColumn;
import com.adobe.viewsource.ViewSource;
[Bindable]
public var imgPath:String;
private function init():void
{
}
override public function set data(value:Object):void
{
super.data = value.track["artwork-url"];
imgPath =super.data.valueOf()
trace(imgPath)
}
]]>
</mx:Script>
<mx:Image source="{imgPath}" id="rowimage"/>
</mx:HBox>
但这样做时,跟踪输出看起来是这样的
<artwork-url>
<mx_internal_uid>7C98E149-1984-584C-7600-AD8940BF2A9C</mx_internal_uid>
</artwork-url>
7C98E149-1984-584C-7600-AD8940BF2A9C
我希望集合数据中的“value”属性接收我从get-imagePathFunction发送的字符串,但它实际上返回了我的整个XMLList
我做错了什么?根据您的跟踪输出,您似乎从数据提供程序检索了错误的值,将其设置为源。如果看不到您的实际数据,就很难知道确切的问题是什么 也就是说,我会重新处理你的项目。首先,你不需要在HBox上放一张图片。只需使用图像。此外,您不需要在渲染器中指定高度,DataGrid应该负责此类定位 我还删除了creationComplete侦听器,因为其中没有代码。我没有使用绑定,而是在数据集方法中设置组件的soruce属性。我还将super.data设置为值,而不是已处理的值;我在设置值的源时执行了处理。更新后的代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<mx:Image xmlns:mx="http://www.adobe.com/2006/mxml"
>
<mx:Script>
<![CDATA[
import components.content.contents.containers.ContentContainerSoundCloud;
import mx.core.Application;
import mx.controls.dataGridClasses.DataGridColumn;
import com.adobe.viewsource.ViewSource;
[Bindable]
public var imgPath:String;
override public function set data(value:Object):void
{
super.data = value;
this.source =value.track["artwork-url"];
trace(imgPath)
}
]]>
</mx:Script>
</mx:Image>
我在ItemRenders中的首选方法是侦听dataChange事件,但这只是个人偏好。重写数据集方法没有什么错 嘿,flextras。我似乎错过了一些有趣的东西。在我的getimagepath标签函数中,传入的对象来自数组集合。所述函数中的str变量设置为所需的值。我希望set data中的值是该字符串,但它是该datagrids行索引的arraycollection部分。使用label函数有什么意义吗?我以前没有注意到这一点,但我非常确定itemrender和labelFunctions是互斥的。这件事先发制人。传递到labelFunction的对象应该是来自数据提供程序的对象。传递到itemRenderer的数据对象也将是相同的对象。将getImagePath处理移到itemRenderer中,并将该函数的结果用作图像源。是的,就是这样:)谢谢您的输入