2014-09-10 59 views
1

我正在使用dgrid,我想在两列中的网格中查找搜索项。Dojo DGrid RQL搜索

举例来说,我想看看学名和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", 
    } 
] 

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

回答

0

从什么,我简要阅读,看来:

我不知道不加思索RegExps是否可以交给其他操作,例如eq

随着dojo/store/Memory,你也可以通过查询功能这将允许你做任何你想要的,所以如果你想为比赛在一个领域其他的你可以做这样的事情比较:

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

当然,如果你想仅过滤的项目,你可以做到这一点简单的对象语法:

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