Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Проблема с api destroy (https://javascript.ru/forum/extjs/56837-problema-s-api-destroy.html)

Koluchiy 06.07.2015 13:54

Проблема с api destroy
 
Всем привет. У меня есть маленький вопрос. Есть такой вот data.Store для grid.Panel:

Ext.define('MyFirstApplication.EmployeeStore', {
        extend:'Ext.data.Store',
        model: 'MyFirstApplication.EmployeeModel',
        autoLoad: true,
        pageSize: 10,
        proxy: {
            type: 'ajax',
            api: {
                create: '/List/Create',
                read: '/List/Read',
                update: '/List/Update',
                destroy: '/List/Delete'
            },
            reader: {
                type: 'json',
                rootProperty: 'data',
                messageProperty: 'meta.msg',
                metaData: 'meta',
                idProperty: 'id',
                totalProperty: 'meta.total',
                successProperty: 'meta.success'
            },
            writer: {
                type: 'json',
                writeAllFields: true,
                allowSingle: false,
                clientIdProperty: null
            }
        }
    });

Когда я читаю записи у меня URL "GET /List/Read?_dc=1436178329384&page=1&start=0&limit=10 HTTP/1.1".

Когда создаю запись URL "POST /List/Create?_dc=1436178336225 HTTP/1.1" с JSON "[{"id":null,"firstName":"Иван","lastName":"Ив анов","email":"ivanovivan@email.com"}]".

Когда изменяю запись URL "POST /List/Update?_dc=1436178590827 HTTP/1.1" с JSON "[{"id":11,"firstName":"Иван","lastName":"Ива нов","email":"ivanovivan@email.com"}]".

Но вот когда удаляю запись - начинается интересное: URL "POST /MyFirstApplication.EmployeeModel?_dc=1436178791556 HTTP/1.1" с JSON "{"id":11}".

А расчитываю на такое: URL "POST /List/Delete?_dc=1436178590827 HTTP/1.1" с JSON "[{"id":11,"firstName":"Иван","lastName":"Ива нов","email":"ivanovivan@email.com"}]".

Подскажите пожалуйста где я ошибся.

novikov 06.07.2015 15:29

похоже на фантомную запись. Вы эту запись прочитали с сервера или создали на клиенте?

Koluchiy 06.07.2015 15:33

Она возникает когда я на клиенте (в браузере) пытаюсь из grid.Panel удалить запись. Хотя в api {... destroy: '/List/Delete'} прописано куда должен обратиться в случае удаления записи ajax. Причем "MyFirstApplication.EmployeeModel" это название моей модели. Еще не понятно почему в JSON отправляется только id, когда указано writeAllFields: true.

Koluchiy 06.07.2015 15:46

Проблему решил. Я ошибочно обращался при удалении к модели, а не к хранилищу.

novikov 06.07.2015 15:47

В грид эта запись (11) попала с сервера или была создана в браузере? Попытался повторить этот случай. Отправляет в Delete со значением всех полей.

https://fiddle.sencha.com/#fiddle/pu5

Ext.define('MyFirstApplication.EmployeeModel', {
    extend: 'Ext.data.Model',
    fields: ['id', 'firstName']
});
Ext.define('MyFirstApplication.EmployeeStore', {
        extend:'Ext.data.Store',
        model: 'MyFirstApplication.EmployeeModel',
        autoLoad: true,
        pageSize: 10,
        proxy: {
            type: 'ajax',
            api: {
                create: '/List/Create',
                read: '/List/Read',
                update: '/List/Update',
                destroy: '/List/Delete'
            },
            reader: {
                type: 'json',
                rootProperty: 'data',
                messageProperty: 'meta.msg',
                metaData: 'meta',
                idProperty: 'id',
                totalProperty: 'meta.total',
                successProperty: 'meta.success'
            },
            writer: {
                type: 'json',
                writeAllFields: true,
                allowSingle: false,
                clientIdProperty: null
            }
        }
    });

Ext.application({
    name : 'Fiddle',

    launch : function() {
        var store = Ext.create('MyFirstApplication.EmployeeStore', {
            data: [
                {"id":11,"firstName":"Иван","lastName":"Ива нов","email":"ivanovivan@email.com"}
            ]
        });
        var record =  store.findRecord('id', 11);
        record.drop();
        store.sync();
        console.log(record);
    }
});

Koluchiy 06.07.2015 16:16

Большое спасибо. Я уже разобрался. Я ошибочно обращался при удалении к модели, а не к хранилищу.

novikov 06.07.2015 16:38

Замечательно! Если перенести определение прокси из хранилища в модель, то можно будет удалять запись и саму по себе, и в составе хранилища.


Часовой пояс GMT +3, время: 20:20.