Прочитать сообщение ExtJS из магазина ajax - PullRequest
6 голосов
/ 02 ноября 2011

У меня есть магазин ExtJS с прокси ajax и читателем json:

Ext.create('Ext.data.Store', {
    proxy: {
        type: 'ajax',
        url: '...',
        reader: {
            type: 'json',
            root: 'data',
            totalProperty: 'totalCount',
            messageProperty: 'message',
            successProperty: 'success'
        },
    ...

Вот что я получаю с сервера:

data: [...]
message: "I want to read this string after the store is loaded"
success: true
totalCount: x

Теперь я хочу получить доступ к «сообщению» при загрузке магазина - где его взять? Я много смотрел, но не могу найти место, чтобы зацепиться? Единственный слушатель в прокси - исключение, которое мне не очень помогает.

Ответы [ 4 ]

5 голосов
/ 02 ноября 2011

использовать хранилище load событие:

Ext.create('Ext.data.Store', {
  listeners: {
    'load': function(store, records, successful, operation) {
      alert(operation.resultSet.message);
    }
  },
  proxy: {
  // ...

ОБНОВЛЕНИЕ

Похоже, что документация для события загрузки неверна.Правильный список аргументов: (store, records, successful) ( без аргумента операции ).Поэтому приведенное выше решение не сработает.

Однако есть свойство читателя rawData, которое может помочь:

Ext.create('Ext.data.Store', {
  listeners: {
    'load': function(store, records, successful) {
      alert(store.getProxy().getReader().rawData.message);
    }
  },
  proxy: {
  // ...
0 голосов
/ 31 мая 2013

Я получаю сообщение следующим образом, хотя загружаю вручную и не использую события здесь:

var initData = Ext.create('My.data.SomeAjaxStore');

initData.load(function(records, operation, success) {
    if (!success || operation.hasException()) {
    // Here is your message from server
    // In case of HTTP error you get:
    //  {
    //    status: 404,
    //    statusText: "Not Found"
    //  }
    var error = operation.getError();
    Ext.log({msg:[Ext.getClassName(me), ": Command failure: ", error].join(""), level:"error"});
}
0 голосов
/ 10 апреля 2013

В другом случае:

myStore.load({
   callback : function(object, response, success) {
    // on error response: success = false
    if(!success) {
        // i don't remember de correct path to get "message" or "responseText"
        console.log(response.response.responseText);
    } else {
         ... 
    }
});

Cya!

0 голосов
/ 13 марта 2013

Мой ответ относится к ExtJs 4.1.x.Я потратил некоторое время на чтение кода, и кажется, что один из способов сделать это - обеспечить обратный вызов в событии beforeload магазина вместо обработки события load.Обратному вызову передается объект операции, который будет содержать исходные параметры запроса, и в случае успеха он будет содержать объект ответа и данные (проанализированные) в свойстве resultSet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...