首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sortCompareFunction中跨DataGridColumns重用AS3

在sortCompareFunction中跨DataGridColumns重用AS3
EN

Stack Overflow用户
提问于 2015-10-12 20:44:56
回答 1查看 73关注 0票数 0

我使用以下函数组装了一个DataGrid

代码语言:javascript
复制
 public function get dataGridColumns():Array {
    var dataGridColumnArray:Array = [];
    dataGridColumnArray.push(createDataGridColumn(col1, "field1", 0.17, sortStrings));
    dataGridColumnArray.push(createDataGridColumn(col2, "field2", 0.17, sortStrings));
    dataGridColumnArray.push(createDataGridColumn(col3, "field3", 0.17, sortStrings));
    return dataGridColumnArray;
}

private static function createDataGridColumn(columnName:String, dataField:String, width:Number,sortCompareFunction:Function = null):DataGridColumn {
    var column:DataGridColumn = new DataGridColumn(columnName);
    column.dataField = dataField;
    column.width = width;
    column.sortCompareFunction = sortCompareFunction;
    return column
}

private function sortStrings(a:Object, b:Object, fields:Array = null):int{
    if(a.toString().toLowerCase() > b.toString().toLowerCase()){
        return 1;
    }else if(a.toString().toLowerCase() < b.toString().toLowerCase()){
        return -1;
    }else{
        return 0;
    }
}

由于我的dataProvider是一个数据对象数组,所以我遇到了排序函数中的a和b是对象的问题,我希望以某种方式将数据字段(列标题)传递到排序中,这样我就可以使用一个排序函数来检查正确的对象属性,这样它看起来就像:

代码语言:javascript
复制
private function sortStrings(a:Object, b:Object, field:String):int{
    if(a.field.toLowerCase() > b.field.toString().toLowerCase()){
        return 1;
    }else if(a.field.toString().toLowerCase() < b.field.toString().toLowerCase()){
        return -1;
    }else{
        return 0;
    }
}

我还没有想出一个很好的方法来做这件事,最坏的情况是,我有6个非常相似的排序函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-12 21:00:56

您可以创建一个比较器工厂函数,它将返回闭包,并包含字段名:

代码语言:javascript
复制
private function createComparatorFor(field:String):Function {
    return function (a:Object, b:Object, fields:Array = null):int{
        const aField:String = a[field].toString().toLowerCase();
        const bField:String = b[field].toString().toLowerCase();

        if (aField > bField) {
            return 1;
        }

        if (aField < bField) {
            return -1;
        }

        return 0;
    }
}

像这样使用它:

代码语言:javascript
复制
dataGridColumnArray.push(createDataGridColumn(
    col1, "field1", 0.17, createComparatorFor("field1")));

未经测试,但应该有效

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

https://stackoverflow.com/questions/33089895

复制
相关文章

相似问题

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