首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >labelFunction和sortCompareFunction与Flex中的大数据集

labelFunction和sortCompareFunction与Flex中的大数据集
EN

Stack Overflow用户
提问于 2011-09-14 14:37:35
回答 2查看 2.2K关注 0票数 0

好的,下面是我必须做的一个简单的例子。

到目前为止还不错,工作A1。is被朋友名替换,并且列是可排序的。

现在,我必须将其应用到包含数千个ID和数千行的系统中。

我试过了,太慢了,不可能把这样的东西交给客户.

在你看来,实现同样目标的最佳方法是什么?

我唯一的想法是不只是将ID存储在DB中,而是将名称也存储为字符串.我只是觉得这是我不该储存的信息..。

有谁有主意吗?另一种排序呈现字符串的方法,而不必回忆每行上的fId.labelFunction(obj1,fId)

非常感谢!

代码语言:javascript
复制
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.events.FlexEvent;

        [Bindable]
        private var _friendList:ArrayCollection = new ArrayCollection([
            {friend_id : 1},
            {friend_id : 3},
            {friend_id : 2},
            {friend_id : 2},
            {friend_id : 1},
            {friend_id : 2},
            {friend_id : 1},
            {friend_id : 3}
        ]);

        private function friendNameFromID(item:Object, column:DataGridColumn):String
        {
            var id:int = item[column.dataField];

            if (id == 1)
                return "Thomas";

            if (id == 2)
                return "Anthony";

            if (id == 3)
                return "George"

            return "";
        }

        private function sortFromFriendName(obj1:Object, obj2:Object):int
        {
            var value1:String = fId.labelFunction(obj1, fId);
            var value2:String = fId.labelFunction(obj2, fId);

            if (value1 == value2)
                return 0;
            else if (value1 > value2)
                return 1;
            else
                return -1;
        }

    ]]>
</fx:Script>

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<mx:DataGrid id="myDataGrid" dataProvider="{_friendList}" width="90%" height="90%" horizontalCenter="0" verticalCenter="0">
    <mx:columns>
        <mx:DataGridColumn dataField="friend_id"/>
        <mx:DataGridColumn id="fId" dataField="friend_id" labelFunction="friendNameFromID" sortCompareFunction="sortFromFriendName"/>
    </mx:columns>
</mx:DataGrid>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-14 14:46:40

而不是做一堆if(..)您是否尝试过使用Dictionary对象,将id设置为键,将名称设置为值?如果我没有弄错的话,使用散列函数访问字典是使用散列函数完成的,并且比一系列If语句快得多。

代码语言:javascript
复制
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx"
initialize="buildNameDictionary()"
>
<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.events.FlexEvent;

        private var nameDictionary:Dictionary;

        [Bindable]
        private var _friendList:ArrayCollection = new ArrayCollection([
            {friend_id : 1},
            {friend_id : 3},
            {friend_id : 2},
            {friend_id : 2},
            {friend_id : 1},
            {friend_id : 2},
            {friend_id : 1},
            {friend_id : 3}
        ]);

        private function buildNameDictionary():void
        {
            nameDictionary= new Dictionary();
            nameDictionary[1] = "Thomas";
            nameDictionary[2] = "Anthony";
            nameDictionary[3] = "George";
        }

        private function friendNameFromID(item:Object, column:DataGridColumn):String
        {
            if(nameDictionary[item])
                return nameDictionary[item] as String

            return "";
        }

        private function sortFromFriendName(obj1:Object, obj2:Object):int
        {
            var value1:String = fId.labelFunction(obj1, fId);
            var value2:String = fId.labelFunction(obj2, fId);

            if (value1 == value2)
                return 0;
            else if (value1 > value2)
                return 1;
            else
                return -1;
        }

    ]]>
</fx:Script>

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<mx:DataGrid id="myDataGrid" dataProvider="{_friendList}" width="90%" height="90%" horizontalCenter="0" verticalCenter="0">
    <mx:columns>
        <mx:DataGridColumn dataField="friend_id"/>
        <mx:DataGridColumn id="fId" dataField="friend_id" labelFunction="friendNameFromID" sortCompareFunction="sortFromFriendName"/>
    </mx:columns>
</mx:DataGrid>
票数 1
EN

Stack Overflow用户

发布于 2011-09-14 14:54:04

那么分页数据呢?过滤那些行不仅让你头疼。用户也可以投诉;)

下面是我发现的第一件事:Flex数据网格的高级分页与过滤

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7418160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档