Question

J'ai le code suivant fonctionnant avec un DataGrid qui a respectivement deux colonnes Column_A et Column_B:

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

Ce code fonctionne bien et trouve toutes les lignes où Column_A contient le mot test ... maintenant, j'aimerais faire la même chose mais regardez dans l'une ou l'autre colonne ... la virgule se traduit par une opération AND mais jeje recherche une opération OR.

J'ai lu les spécifications AndOrReadStore et d'après ma compréhension, je devrais être en mesure de le fairequelque chose comme ça:

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

Cependant, cela ne fonctionne pas et je n'obtiens aucun résultat ... Je n'arrive même pas à le faire fonctionner avec une seule colonne, comme ceci

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

Qu'est-ce que je fais de mal?

Merci

Était-ce utile?

La solution

Voici un exemple programmatique fonctionnel (cliquez sur le bouton pour appeler le filtre: Column_A contient un e OR Column_B vaut 300):

le 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();
});

Et maintenant le 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>

Et enfin le css (style.css)

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

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

Autres conseils

I looked at the link you posted, and I think it's an issue of getting the brackets and parenthesis correct. Also, it looks like the 'complex query' is used for objects, whereas 'query' is used for strings:

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

Here's the link I looked at: http://dojotoolkit.org/reference-guide/dojox/data/AndOrReadStore.html#dojox-data-andorreadstore

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top