javascript - Filtro Dojo DataGrid utilizando una AndOrReadStore: ¿qué estoy haciendo mal?
dojox.grid (2)
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 test en él ... ahora, me gustaría hacer lo mismo pero mirar en cualquier columna ... la coma se traduce en una operación Y pero estoy buscando una operación OR.
Leí las especificaciones de AndOrReadStore y, en mi opinión, 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
Aquí hay un ejemplo programático que funciona (haga clic en el botón para invocar el filtro: Column_A contiene un e OR Column_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%;
}
Miré el enlace que publicaste, y creo que es una cuestión de corregir los corchetes y los paréntesis. Además, parece que la ''consulta compleja'' se usa para los objetos, mientras que ''consulta'' se usa para las 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