Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 在flex数据网格中使用图像项渲染_Apache Flex_Image_Datagrid_Itemrenderer - Fatal编程技术网

Apache flex 在flex数据网格中使用图像项渲染

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> <![

我试图在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>
        <![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中,并将该函数的结果用作图像源。是的,就是这样:)谢谢您的输入