2014-09-10 40 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 
});