ExtJs Grid未根据响应文本进行更新

时间:2011-11-11 10:43:22

标签: extjs grid

请在下面提到的情况下帮助我;

我的java Web应用程序使用JSON作为数据交换格式。在跑步的时候; firebug(firefox)按预期显示响应和JSON数据;但网格未按预期更新,而是空白。以下是商店和网格定义;

//Grid & Store definition

    var searchResultStore = Ext.create('Ext.data.JsonStore', {
    model : 'BookModel',
    proxy : {
        type : 'ajax',
        reader : {
            totalProperty : 'results',
            type : 'json',
            root : 'data'
        }
    },
    autoLoad : true
});

Ext.define('Library.SearchBookGrid', {
    extend : 'Ext.grid.Panel',
    alias : 'widget.SearchBookGrid',
    id : 'searchBookGrid',
    title : 'Books',
    closable : true,
    initComponent : function() {

        this.store = searchResultStore;

        this.columns = [ {
            xtype : 'gridcolumn',
            dataIndex : 'title',
            text : 'Title'
        }, {
            xtype : 'gridcolumn',
            dataIndex : 'authorName',
            text : 'Author'
        } ];


        this.callParent(arguments);
    }
});

有一个BOOK SEARCH ExtJS表格;它调用一个URL(/ MyLibrary / Books?action = 6)&搜索表单值以JSONDATA的形式提交。搜索结果被分配为商店(searchResultStore)跟随;

    Ext.Ajax.request({
        url : '/MyLibrary/Books?action=6', 
        headers: {'Content-Type':'application/json; charset=utf-8'},
        jsonData : Ext.JSON.encode(form.getValues()),
        params:{
        action : 6
        },
        method : 'POST',
        success : function(response, request) {
               searchResultStore.loadData(Ext.JSON.decode(response.responseText));
        },
        failure : function(results, request) {
                Ext.Msg.alert("Search..", "Please try again...!!");
        },
});

我错过了什么或者我错了这个代码......请帮忙...... !!!!

提前致谢...... !!

1 个答案:

答案 0 :(得分:1)

鉴于我看到你用一个根数据把读者放在商店里,我希望你用来加载数据的json不是那种格式。

loadData函数需要一个模型数组或一个元素数组。 像[{"id":1},{....我关心的是你尝试使用读者,你的json看起来像:

{"data":[{"id:1},{..... 

然后这可能不是问题。我希望它有所帮助

编辑以及我在第一条评论中试图说的问题,您在商店中设置的阅读器仅在通过加载功能加载商店时使用。 LoadData需要一个数组,所以如果你想快速修复,请尝试:

searchResultStore.loadData(Ext.JSON.decode(response.responseText).data);

但我建议您使用store load方法而不是使用reader的ajax请求。

  searchResultStore.load({
    url : '/MyLibrary/Books?action=6', 
    jsonData : Ext.JSON.encode(form.getValues()),
    extraParams:{
    action : 6
    },
})

检查load函数的文档并查看它可以采用的参数