【问题标题】:using an image item render in a flex data grid在 flex 数据网格中使用图像项渲染
【发布时间】:2010-07-07 15:38:41
【问题描述】:

我正在尝试将图像添加到在 flex 中动态呈现的数据网格项。

这是我的 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>

我期待设置数据中的“值”属性接收我从 get imagePathFunction 发送的字符串,但它实际上返回了我的整个 XMLList。

我做错了什么?

【问题讨论】:

    标签: apache-flex image datagrid itemrenderer


    【解决方案1】:

    根据您的跟踪输出,您似乎从 dataProvider 检索错误值以设置为源。如果没有看到您的实际数据,很难知道确切的问题可能是什么。

    也就是说,我会重新处理您的 itemRenderer。首先,您不需要将单个图像放入 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>
    

    我在 itemRenderers 中的首选方法是监听 dataChange 事件,但这只是个人喜好。覆盖数据集方法没有任何问题。

    【讨论】:

    • 嘿,flextras。我似乎在这里遗漏了一些基本的东西。在我的 getimagepath 标签函数中,传入的对象来自数组集合。我在所说函数中的 str 变量被设置为我想要的值。我希望 set data 中的值是那个字符串,但它是那个 datagrids 行索引的 arraycollection 的一部分。有标签功能有什么意义吗?
    • 我之前没有注意到这一点,但我很确定 itemRenderers 和 labelFunctions 是互斥的。 itemRenderer 优先。传递给 labelFunction 的对象应该是来自您的 dataProvider 的对象。传递给 itemRenderer 的数据对象也将是同一个对象。将 getImagePath 处理移动到您的 itemRenderer 中,并将该函数的结果用作图像的源。
    • 是的,做到了 :) 谢谢您的意见
    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2014-07-30
    • 2017-08-17
    • 1970-01-01
    相关资源
    最近更新 更多