2016-02-05 2 views
2

Я хочу отобразить сообщение с моего сервера в пользовательском интерфейсе после синхронизации сетки ExtJS. Вот отрывок о том, что идет:ExtJS 6 access messageProperty in call sync callback

this.store.sync({ 
     callback: function (records, operation, success) { 
      // messageProperty accessing code 
     }, 
     success: function (batch, options) { 
      // messageProperty accessing code 
     }, 
     failure: function (batch, options) { 
     } 
    }); 

Вот часть определения магазина:

proxy: { 
    headers: { 'Accept': 'application/json' }, 
    limitParam: undefined, 
    pageParam: undefined, 
    startParam: undefined, 
    paramsAsJson: false, 
    type: 'ajax',   
    // ... 
    reader: { 
     type: 'json', 
     rootProperty: 'Data', 
     messageProperty: 'Message' 
    }, 
    // ... 
}, 

Вот некоторые данные, получаемые от сервера (опущено данные внутри массива:

{ 
"Data":[ 
], 
"Message":"Success!" 
} 

Приложение, похоже, не имеет проблем с чтением свойства данных (т. Е. Моя сетка работает должным образом), но я не могу получить доступ к свойству сообщения в событии обратного вызова или успешного события t он синхронизирует метод. Это сообщение об ошибке:

Uncaught TypeError: Cannot read property 'Message' of undefined(…) 

createAccessor: (function() { 
    var re = /[\[\.]/; 
    return function (expr) { 
     var me = this, 
      simple = me.getUseSimpleAccessors(), 
      operatorIndex, result, current, parts, part, inExpr, isDot, isLeft, isRight, special, c, i, bracketed, len; 
     if (!(expr || expr === 0)) { 
      return; 
     } 
     if (typeof expr === 'function') { 
      return expr; 
     } 
     if (!simple) { 
      operatorIndex = String(expr).search(re); 
     } 
     if (simple === true || operatorIndex < 0) { 
      result = function (raw) { 
       return raw[expr]; <-------- This is where it goes wrong at some point 
      }; 
     } 

Если я отладки через этот код, в каком-то момент сырьевых переменном теряет свое значение, которое дает ожидаемую неопределенное сообщение об ошибке. Мой вопрос в том, как я могу получить свойство сообщения в функции обратного вызова или успеха в магазине Ext 6?

ответ

1

В ExtJS 6 Sencha изменил значение по умолчанию keepRawData на false. Если вы измените его на true, все должно работать так, как ожидалось. Sencha docs сообщает нам, что есть вероятность утечки памяти, но я еще не сталкивался с такой проблемой.

+0

Это сработало. В делегате обратного вызова я могу теперь получить доступ к свойству сообщения с помощью этого кода: this.reader.rawData.Message. – hbulens