ExtJs Grid не обновляется согласно тексту ответа - PullRequest
1 голос
/ 11 ноября 2011

Пожалуйста, помогите мне в нижеуказанной ситуации;

Мое веб-приложение на Java использует 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 Ответ

1 голос
/ 11 ноября 2011

Поскольку я видел, что вы поместили в хранилище устройство чтения с корневыми данными, я надеюсь, что json, который вы используете для загрузки данных, имеет не тот формат.

Функция loadData ожидает массив моделей, илимассив элементов.как [{"id":1},{.... Меня беспокоит то, что вы пытаетесь использовать ридер, и ваш json выглядит следующим образом:

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

Опять же, это может не быть проблемой.Я надеюсь, что это поможет

РЕДАКТИРОВАТЬ хорошо, проблема в том, что я пытался сказать в первом комментарии, ридер, который вы установили в магазине, используется только при загрузке магазина функцией загрузки,LoadData ожидает массив, поэтому, если вы хотите быстро исправить, попробуйте:

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

Но я предлагаю вам использовать метод загрузки хранилища вместо ajax-запроса, который будет использовать ридер.

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

Проверьте документы для функции load и посмотрите, какие параметры она может принять

...