【问题标题】:Kendo UI datasource filter by comparing fields通过比较字段来过滤 Kendo UI 数据源
【发布时间】:2014-03-11 08:40:40
【问题描述】:

我有一个 Kendo UI 数据源,我想通过比较字段来过滤它。 这是我的数据源:

var dataSource = new kendo.data.DataSource({
  data: [
    { appointment: "Hairdresser", start: new Date("somedate"), end:  new Date("somedate")},
    { appointment: "Meeting", start: new Date("somedate"), end:  new Date("somedate")},
    { appointment: "Shopping", start: new Date("somedate"), end:  new Date("somedate")}
  ]
});

我想像这样过滤它:

SELECT * FROM dataSource WHERE start > end;

dataSource.filter({
                "field": "start",
                "operator": "gt",
                "value": ?????
            });

如何使用过滤器来实现这一点?

【问题讨论】:

    标签: filter kendo-ui kendo-datasource


    【解决方案1】:

    使用内置过滤器不可能做到这一点。相反,我建议您创建一个按钮,单击该按钮会将一些额外的参数发送到服务器,您可以在服务器上自行执行此类过滤。

    要发送其他字段并执行读取请求,您可以这样做

    dataSource.read({ myCustomFilter:true });
    

    【讨论】:

    • 我怀疑这个:(我不想做过滤服务器端,因为我想保留原始数据集的上下文。
    【解决方案2】:

    如果您想在客户端执行此操作,我建议您使用类似 lo-dash 的 filter 方法(或者,根据您需要支持的浏览器,只需使用本机 Array.filter 实现)来实现您的筛选。

    您可以将所有数据存储在外部数组中,仅将过滤后的数据保留在绑定到 UI 的数据源中(更新为dataSource.data()):

    var data = [{
        name: 'barney',
        age: 36,
        start: new Date(2011, 1, 1),
        end: new Date(2012, 1, 1)
    }, {
        name: 'fred',
        age: 40,
        start: new Date(2011, 1, 1),
        end: new Date(2010, 1, 1)
    }];
    
    var filtered = _.filter(data, function (item) {
        return item.start > item.end;
    });
    
    dataSource.data(filtered);
    

    【讨论】:

    • 嗨,是的,这与我最终得到的结果相似。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多