/ / Dojo DataGrid filter usando un AndOrReadStore: ¿qué estoy haciendo mal? - javascript, dojo, dojox.grid

Dojo DataGrid filtra usando un AndOrReadStore - ¿qué estoy haciendo mal? - javascript, dojo, dojox.grid

Tengo el siguiente código trabajando con un DataGrid que tiene dos columnas Column_A y Column_B respectivamente:

grid.filter({Column_A: "*test*", Column_B: "*"}, true)

Este código funciona bien y encuentra todas las filas donde Column_A tiene la palabra prueba en ella ... ahora, me gustaría hacer lo mismo, pero mira en cualquiera de las columnas ... la coma se traduce en una operación AND pero estoy buscando una operación OR.

yo leo el Especificaciones de AndOrReadStore y según mi entendimiento, debería poder hacer algo como esto:

grid.filter({complexQuery: "Column_A: "*test*" OR Column_B: "*""}, true)

sin embargo, esto no funciona y no obtengo ningún resultado ... ni siquiera puedo hacer que funcione con una columna, como esta

grid.filter({complexQuery: "Column_A: "*test*""}, true)

¿Qué estoy haciendo mal?

Gracias

Respuestas

4 para la respuesta № 1

Aquí hay un ejemplo programático que funciona (haga clic en el botón para invocar el filtro: Columna_A contiene una e OR Columna_B es 300):

el JavaScript (script.js):

dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.form.Button");
dojo.require("dojox.grid.DataGrid");
dojo.require("dojox.data.AndOrReadStore");

dojo.ready(function(){
var appLayout = new dijit.layout.ContentPane({
id: "appLayout"
}, "appLayout");

var data = {
"items": [
{"Column_A": "alpha", "Column_B": "100"},
{"Column_A": "beta",  "Column_B": "200"},
{"Column_A": "gamma", "Column_B": "300"},
{"Column_A": "delta", "Column_B": "400"}
]
};
var store = new dojox.data.AndOrReadStore({
data: data
});


var layout = [[
{name : "A", field : "Column_A", width : "125px"},
{name : "B", field : "Column_B", width : "100%"}
]];


var grid = new dojox.grid.DataGrid({
structure : layout,
store: store,
queryOptions: {ignoreCase: true}
});


var filterButton = new dijit.form.Button({
label: "Filter",
onClick: function () {
grid.filter({complexQuery: "Column_A: "*e*" OR "Column_B: "300""});
}
});

filterButton.placeAt(appLayout.domNode);
grid.placeAt(appLayout.domNode);

appLayout.startup();
});

Y ahora el html (index.html)

<html lang="en">
<head>
<meta charset="utf-8">
<title>DataGrid with AndOrReadStore</title>

<link rel="stylesheet" href="style.css" media="screen"/>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dijit/themes/claro/claro.css" />
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dijit/themes/claro/document.css" />
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojox/layout/resources/ExpandoPane.css" />
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojox/grid/resources/claroGrid.css">
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojox/grid/enhanced/resources/claro/EnhancedGrid.css">

<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojo/dojo.js" type="text/javascript"></script>
<script src="script.js" type="text/javascript"></script>
</head>

<body class="claro">
<div id="appLayout"></div>
</body>
</html>

Y finalmente el css (style.css)

html, body {
width: 100%; height: 100%;
margin: 0; padding: 0;
overflow: hidden;
}

#appLayout {
width: 100%; height: 100%;
}

0 para la respuesta № 2

Miré el enlace que publicaste y creo que esUna cuestión de obtener los corchetes y paréntesis correctos. Además, parece que la "consulta compleja" se usa para objetos, mientras que la "consulta" se usa para cadenas:

grid.filter({query: ("Column_A: "*test*" OR Column_B: "*"")}, true);

Aquí está el enlace que miré: http://dojotoolkit.org/reference-guide/dojox/data/AndOrReadStore.html#dojox-data-andorreadstore