2012-01-15 4 views
3

私はそれぞれ2つの列Column_AColumn_Bを持っているデータグリッドでの作業次のコードを持っています?AndOrReadStoreを使用して道場のDataGridフィルタ - 私が間違って何をやっているが

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

このコードは、すべての行を正常に動作して検索しますここでColumn_Aは単語testを持っています...今、私は同じことをしたいと思いますがどちらかの列を見てください....コンマはAND演算に変換されますが、OR演算を探しています。

私はAndOrReadStore specsを読んで、私の理解に基づいて、私はこのような何かを行うことができるようになります。しかし、これは動作しませんし、私は何も結果を得ることはありません

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

...私はできません

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

私は間違って何をしていますか?

は、私はあなたが投稿したリンクを見て、私はそれが正しいブラケットと括弧を得ることの問題だと思うあなた

答えて

4

は、(作業のプログラム例です。フィルタを呼び出すためのボタンをクリックしてください:Column_Aは、Eが含まれているかCOLUMN_Bは300です):

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

そして今、HTML(index.htミリリットル)

<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> 

そして最後に、CSS(style.cssに)

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

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

優秀...私はJSFiddle(http://jsfiddle.net/Ayyoudy/aDq4f/)で試してみましたが、すごくうまくいきます...今はなぜ私のコードが...ありがとう、どうもありがとう多く! – Ayyoudy

0

ありがとうございます。また、「クエリ」が文字列のために使用されているのに対し、「複雑なクエリ」が、オブジェクトのために使用されているように見える:

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

ここで私は見てのリンクです:ここでhttp://dojotoolkit.org/reference-guide/dojox/data/AndOrReadStore.html#dojox-data-andorreadstore

+0

おかげで私はそれはしかし理にかなって...その本体として文字列で関数をわからないんだけど?私はあなたがリターンキーワードを忘れたと思う。私はとにかくそれを試みたが、うまくいきません。 – Ayyoudy

+0

@Ayyoudyはこれがまだ動作しないかどうか私に知らせてくれます。 – Ted

関連する問題