2014-09-10 2 views
1

Я работаю с dgrid, где я хочу найти поисковый запрос в моей сетке на двух столбцах.Dojo DGrid RQL Search

Например, я хочу увидеть, если научное название и 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

И я могу понять основные запросы, однако «содержит» синтаксис ускользает от меня.

Например, если у меня был установлены эти простые данные и хотел, чтобы найти записи с научными и общими именами, которые содержат строку «Ас» Я думаю, что мое содержит запрос будет выглядеть следующим образом:

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

Из того, что я кратко читал, кажется, что:

  • contains был replaced by any and all
  • они предназначены для сравнения массивов, а не сравнение строк

Я не уверен, экспромтом может ли 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 
}); 
Смежные вопросы