#extjs #grid
#extjs #сетка
Вопрос:
Пожалуйста, помогите мне в приведенной ниже ситуации;
Мое веб-приложение Java использует JSON в качестве формата обмена данными. Во время запуска; firebug (firefox) показывает ответ, а также данные JSON, как и ожидалось; но сетка обновляется не так, как ожидалось, скорее она становится пустой. Ниже приведены хранилище и определение сетки;
//Grid amp; 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);
}
});
Существует форма ExtJS для поиска КНИГ; которая вызывает URL (/MyLibrary/Books?действие = 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. считыватель используется только в ajax-запросе загрузки хранилища, поэтому для вашего собственного ajax-запроса данные должны представлять собой массив элементов. не внутри корневого атрибута данных, возможно, это может быть вашей проблемой
2. Спасибо за ваш ответ nscrob; вы хотите сказать … текст ответа должен быть JSONArray вместо JSONObject… пожалуйста, исправьте меня …!!
Ответ №1:
Учитывая, что я видел, как вы поместили программу чтения в хранилище с корневыми данными, я надеюсь, что json, который вы используете для загрузки данных, не имеет этого формата.
Функция loadData ожидает массив моделей или массив элементов. например, [{"id":1},{....
меня беспокоит то, что вы пытаетесь использовать reader, и ваш json выглядит как:
{"data":[{"id:1},{.....
Опять же, это может быть не проблема. Я надеюсь, что это поможет
РЕДАКТИРОВАТЬ ну, проблема в том, что я пытался сказать в первом комментарии, считыватель, который вы установили в хранилище, используется только при загрузке хранилища с помощью функции загрузки. loadData ожидает массив, поэтому, если вы хотите быстро исправить, попробуйте:
searchResultStore.loadData(Ext.JSON.decode(response.responseText).data);
Но я предлагаю вам использовать метод загрузки хранилища вместо запроса ajax, который будет использовать reader.
searchResultStore.load({
url : '/MyLibrary/Books?action=6',
jsonData : Ext.JSON.encode(form.getValues()),
extraParams:{
action : 6
},
})
Проверьте документы на наличие функции load и посмотрите, какие параметры она может принять
Комментарии:
1. Что ж ….. я должен упомянуть текст ответа, и это выглядит следующим образом; {«результаты»: 3, «данные»: [{«title»: «Название теста 1», «AuthorName»: «Автор теста 1»}, {«title»: «Название теста 2», «AuthorName»: «Автор теста 2»}, {«title»: «Название теста 3», «AuthorName»: «Автор теста 3»}]}
2. да .. я только что опубликовал текст ответа.
3. Первая строка сработала.. searchResultStore.loadData(Ext.JSON.decode(response.responseText).data); Спасибо, nscrob …. хорошего дня ..!!