【问题标题】:Dojo DGrid RQL SearchDojo DGrid RQL 搜索
【发布时间】:2014-09-10 17:23:32
【问题描述】:

我正在使用一个 dgrid,我想在我的网格中的两列上找到一个搜索词。

例如,我想查看科学名称和 commonName 列是否包含字符串“Aca”(我希望我的搜索不区分大小写)

我的网格定义:

var CustomGrid = declare([Grid, Pagination ]);
var gridStore = new Memory({ idProperty: 'tsn', data: null });
gridStore.queryEngine = rql.query;

grid = new CustomGrid({
store: gridStore,
            columns:
                    [
                    { field: "tsn", label: "TSN #"},
                    { field: "scientificName", label: "Scientific Name"},
                    { field: "commonName", label: "Common Name",},
                    ],
            autoHeight: 'true',
            firstLastArrows: 'true',
            pageSizeOptions: [50, 100],
        }, id);

使用内置的查询语言(我认为是简单的查询语言),我能够在一列或另一列中找到该术语,但我无法进行复杂的搜索来返回两列的结果。

grid.set("query", { scientificName : new RegExp(speciesKeyword, "i") });
grid.refresh()

我开始阅读,我认为 RQL 可以解决这个问题,但是,我在语法上遇到了困难。

我一直在看这些页面:

http://rql-engine.eu01.aws.af.cm/

https://github.com/kriszyp/rql

而且我能够理解基本查询,但是“包含”语法让我难以理解。

例如,如果我有这个简单的数据集,并且想要查找包含字符串“Aca”的科学名称和通用名称的条目,我会认为我的包含查询将如下所示:

contains(scientificName,string:aca)

但是,这会导致不匹配。

[
    {
            "tsn": 1,
            "scientificName": "Acalypha ostryifolia",
            "commonName": "Rough-pod Copperleaf",
    },
    {
            "tsn": 2,
            "scientificName": "Aegalius acadicus",
            "commonName": "Northern Saw-whet Owl",
    },
    {
            "tsn": 3,
            "scientificName": "Portulaca pilosa",
            "commonName": "2012-02-01",
    },
    {
            "tsn": 4,
            "scientificName": "Accipiter striatus",
            "commonName": "Kiss-me-quick",
    },
    {
            "tsn": 5,
            "scientificName": "Acorus americanus",
            "commonName": "American Sweetflag",
    }
] 

有人可以指导我如何制定正确的语法吗?谢谢。

【问题讨论】:

    标签: dojo dgrid


    【解决方案1】:

    从我简要阅读的内容看来:

    我不确定 RegExps 是否可以直接交给其他操作,例如eq.

    使用dojo/store/Memory,您还可以传递一个查询函数,它允许您做任何您想做的事情,所以如果您想比较一个字段中的匹配项 em> 另一个你可以这样做:

    grid.set('query', function (item) {
        var scientificRx = new RegExp(speciesKeyword, 'i');
        var commonRx = new RegExp(...);
        return scientificRx.test(item.scientificName) || commonRx.test(item.commonName);
    });
    

    当然,如果您只想过滤匹配 both 的项目,您可以使用简单的对象语法来做到这一点:

    grid.set('query', {
        scientificName: scientificRx,
        commonName: commonRx
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 2012-11-06
      • 1970-01-01
      相关资源
      最近更新 更多