使用complexQuery的Dojo DataGrid过滤不起作用

时间:2013-06-25 11:41:49

标签: javascript search datagrid dojo

我试图找出为什么过滤功能不起作用,但我被困了。这是我第一次使用Dojo,但我并不熟悉这个框架。我正在努力寻找可能2或3个小时,但我找不到解决方案。 我想要的是,实现过滤器或搜索机制。但它不起作用,但...... 这是我的代码:

dojo.require('dojo.store.JsonRest');
dojo.require('dijit.layout.ContentPane');
dojo.require("dijit.form.Button");
dojo.require('dojox.grid.DataGrid');
dojo.require('dojo.data.ObjectStore');
dojo.require('dijit.form.TextBox');
dojo.require('dojox.data.AndOrReadStore');
dojo.require('dojo._base.xhr');
dojo.require('dojo.json')
dojo.require('dojo.domReady');
dojo.ready(
function(){
    var appLayout = new dijit.layout.ContentPane({
        id: "appLayout"
    }, "appLayout");

    var textBox = new dijit.form.TextBox({
        name: "searchbox",
        placeHolder: "Search ..."
    });

    var filterButton = new dijit.form.Button({
        label: 'Filter',
        onClick: function () {
            searchWord = textBox.get('value');
            query = "id: '"+searchWord
                +"' OR date_A: '"+searchWord
                    +"' OR dateB: '"+searchWord
                +"' OR product: '"+searchword+"'";
        grid.filter({complexQuery: query}, true);
        }
        });

        store = new dojo.store.JsonRest({target:'products/'});

        grid = new dojox.grid.DataGrid(
        {
            store:dojo.data.ObjectStore({objectStore: store}),
            structure: 
            [
                {name:'id', field: 'id'},         
                {name:'date_A', field: 'dateA'},    
                    {name:'date_B', field: 'dateB'}, 
                    {name:'product' , field: 'product'},          
                ],
            queryOptions: {ignoreCase: true}
            }); 

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

    appLayout.startup();
}
);

如果你能告诉我这个道场代码有什么问题,那将是非常好的... 结果是,加载图标出现,一段时间后显示未过滤的数据......没有抛出异常。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

好的,我用AndOrReadWriteStore解决了它。您还可以使用AndOrReadStore。问题是,JSON数据格式不正确。您可以在此处看到正确的格式:dojotoolkit.org/api/dojox/data/AndOrReadStore。另一个变化是:我使用url而不是store中的data属性。所以最后它现在正在运作。无论如何,谢谢。

答案 1 :(得分:1)

以下是使用AND和OR的过滤器示例:

grid.filter(“(类型:'恐怖'&&(fname:'”+ searchWord +“'|| lname:'”+ searchWord +“'))“)

因此用户搜索词在fname和lname之间作为OR进行过滤,但它也会搜索genre = Horror作为AND。

本文档还有其他例子...... http://livedocs.dojotoolkit.org/dojox/data/AndOrReadStore