首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dojo DGrid RQL搜索

Dojo DGrid RQL搜索
EN

Stack Overflow用户
提问于 2014-09-10 17:23:32
回答 1查看 282关注 0票数 1

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

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

我的网格定义:

代码语言:javascript
复制
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);

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

代码语言:javascript
复制
grid.set("query", { scientificName : new RegExp(speciesKeyword, "i") });
grid.refresh()

我开始阅读,我认为RQL可以解决这个问题,然而,我正在与语法斗争。

我一直在看这些页面:

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

https://github.com/kriszyp/rql

我能够理解基本的查询,但是“包含”语法却让我无法理解。

例如,如果我有这个简单的数据集,并且希望找到包含字符串"Aca“的科学和公共名称的条目,我想我的would查询应该如下所示:

代码语言:javascript
复制
contains(scientificName,string:aca)

然而,这导致没有匹配。

代码语言:javascript
复制
[
    {
            "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",
    }
] 

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-18 12:34:15

从我简短的阅读来看,似乎:

  • containsall
  • 这些是用于数组比较,而不是字符串比较。

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

使用dojo/store/Memory,您还可以传递一个查询函数,该函数允许您做任何您想做的事情,因此,如果您想在一个字段中进行匹配比较,您可以这样做:

代码语言:javascript
复制
grid.set('query', function (item) {
    var scientificRx = new RegExp(speciesKeyword, 'i');
    var commonRx = new RegExp(...);
    return scientificRx.test(item.scientificName) || commonRx.test(item.commonName);
});

当然,如果您只希望筛选与两者匹配的项,则可以使用简单的对象语法:

代码语言:javascript
复制
grid.set('query', {
    scientificName: scientificRx,
    commonName: commonRx
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25771439

复制
相关文章

相似问题

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