Изменение в хранилище данных потеряно при перезапуске приложения

Я создал веб-приложение ExtJS. У меня есть файл JSON с некоторыми данными в нем. Я создал хранилище данных и загрузил данные из JSON. Я также связываю хранилище данных с сеткой. Сетка показывает данные отлично.

Теперь я хотел обновить некоторый элемент в сетке, но также чтобы обновлялись данные в json.

Я использовал следующий код, когда кто-то нажимает кнопку:

var grid = Ext.getCmp('PersonListing');
var store = Ext.getStore('PersonDataStore');
store.each(function(record,idx){
      val = record.get('Name');
      if(val == "Jon"){
         record.set('Name','David');
      }

      record.commit();
});
console.log(store);
grid.reconfigure(store);

Теперь, как только этот код выполняется, я вижу имя, измененное в сетке данных. Но если я обновлю приложение или перезапущу его, изменения будут потеряны. Данные в файле JSON не изменены. Почему это происходит? Как я могу реализовать это, чтобы изменения сохранялись?


Вот код для магазина

Ext.define('PersonListing.store.PersonDataStore', {
    extend: 'Ext.data.Store',
    alias: 'store.personstore',

    requires: [
        'PersonListing.model.PersonData',
        'Ext.data.proxy.Ajax',
        'Ext.data.reader.Json'
    ],

    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            storeId: 'PersonDataStore',
            autoLoad: true,
            model: 'PersonListing.model.PersonData',
            proxy: {
                type: 'ajax',
                url: 'data/people.json',
                reader: {
                    type: 'json',
                    rootProperty: 'data'
                }
            }
        }, cfg)]);
    }
});

1 ответ

Ваш сервер приложений должен реализовывать все операторы CRUD, в частности POST обработчик запроса для data/people.json маршрут.

По умолчанию Ajax Proxy использует следующие методы HTTP для CRUD:

{create: 'POST', read: 'GET', update: 'POST', destroy: 'POST'}

Если вы хотите изменить это поведение, установите actionMethods имущество.

http://docs.sencha.com/extjs/6.0/6.0.1-modern/

Из комментариев:

Чтобы использовать локальный прокси-сервер хранения, установите тип прокси в localstorage:

 constructor: function(cfg) {
    var me = this;
    cfg = cfg || {};
    me.callParent([Ext.apply({
        storeId: 'PersonDataStore',
        autoLoad: true,
        model: 'PersonListing.model.PersonData',
        proxy: {
            type: 'localstorage',
        }
    }, cfg)]);
}

Чтобы инициализировать локальное хранилище с вашим JSON, сделайте Ajax-запрос в начале и установите данные хранилища на этот запрос.

 // Modify to match your JSON format
 Ext.Ajax.request({
      url: 'data/people.json',
      success: function(response){
         var responseObj = Ext.decode(response.responseText);
         var store = Ext.getStore('PersonDataStore');
         Ext.each(responseObj, function(object) {

             // assumes a specific type of response object
             var record =  Ext.create('PersonListing.model.PersonData', object);                        
             store.add(record);                             
         });
         store.sync();
       }
 });
Другие вопросы по тегам