javascript - 如何为koGrid实现自定义排序?

标签 javascript sorting knockout.js typescript kogrid

数据:

16点 19.99 小时 210.46小时 262.54小时 303.19 小时 55.95 小时 60.07 小时 64.07 小时 7.95 小时

我想要什么:

我需要允许在 koGrid 中对这一数据进行排序(默认功能是通过单击网格标题、升序或降序排序)。

问题:

数据是字符串,因此您可能会猜测它是如何通过字符代码排序的。 我有什么选择?我发现一列可以分配 sortFn,我猜是这样的?

enter image description here

代码:

this.gridOptions = {
            canSelectRows: false,
            showColumnMenu: false,
            showFilter: false,
            columnDefs: [

                { field: 'localizedName', displayName: 'Name' },
                {
                    field: 'localizedDuration', displayName: 'Duration',
                    sortFn: function (itemA: string, itemB: string) {
                        var numA = parseFloat(itemA);
                        var numB = parseFloat(itemB);

                        if (!numA && !numB)
                            return 0;
                        else if (!itemA && (itemA === undefined || itemA === null))
                            return 1;
                        else if (!itemB && (itemB === undefined || itemB === null))
                            return -1;

                        if (numA > numB)
                            return -1;
                        else if (numA < numB)
                            return 1;

                        return 0;
                    }
                },
            ],
            data: this.dataRows
        };

fiddle : JSFiddle

最佳答案

尝试像这样修改你的代码

查看:

<div data-bind="koGrid: gridOptions"></div>

View 模型:

vm = function () {
    var self = this;
    self.myData = ko.observable([{
        hours: '113.02 hours'
    }, {
        hours: '13.01 hours'
    }, {
        hours: '303.01 hours'
    }, {
        hours: '33.01 hours'
    }]);

    self.gridOptions = {
        data: self.myData,
        columnDefs: [{
            field: 'hours',
            displayName: 'hours',
            sortFn(a, b) {
                if (!(a && b)) {
                    return -1;
                }
                var a1 = parseFloat(a.split(' ')[0]);
                var b1 = parseFloat(b.split(' ')[0]);
                if (a1 > b1) return 1;
                if (a1 < b1) return -1;
                if (a1 = b1) return 0;
            }
        }]
    };
};
ko.applyBindings(new vm);

工作 fiddle here

提供引用文档 here

关于javascript - 如何为koGrid实现自定义排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30795489/

相关文章:

javascript - onpaste 事件替换文本框中的文本

javascript - 通过 knockout 数据绑定(bind)获取输入字段中的值

javascript - KnockoutJS 关联数组和选择列表

algorithm - 重叠区间的最大值

ios - 如何使用2个键对数组进行排序

java - java数组排序类

javascript - Knockout.js 在表中添加和更新数组

javascript - Jade javascript block (服务器端)

javascript - 使用javascript有条件地格式化php输出

javascript - 将类添加到同位素中的过滤项目和隐藏项目。按钮不是复选框