Удаление записей из магазина с использованием прокси AJAX в Sencha Touch 1.1 - PullRequest
3 голосов
/ 15 ноября 2011

Я не знаю, как определить, является ли HTTP-запрос, сгенерированный прокси-сервером AJAX, операцией вставки / обновления или удаления.

Это мои данные (simpsons.json):

[
    {
        "id": 1,
        "firstName": "Homer"
    },
    {
        "id": 2,
        "firstName": "Marge"
    },
    {
        "id": 3,
        "firstName": "Bart"
    },
    {
        "id": 4,
        "firstName": "Lisa"
    }
]

Это мой код Sencha Touch 1.1:

Character = Ext.regModel('Character', {
    fields: [
        {name: 'id', type: 'int'},
        {name: 'firstName', type: 'string'}
    ]
});

SimpsonsStore = new Ext.data.Store({
    model: 'Character',
    proxy: {
        type: 'rest',
        url: 'simpsons.json'
    },
    autoLoad: true
});

SimpsonsStore.on('load', function(store, records, success) {

    // add record
    store.add({id: 5, firstName: 'Maggie'});

    // update record
    var margeRecord = store.findRecord('firstName', 'Marge');
    margeRecord.set('firstName', 'Marjorie');

    // delete record
    var homerRecord = store.findRecord('firstName', 'Homer');
    store.remove(homerRecord);

    // sync store
    store.sync();
});

При выполнении этого кода генерируются следующие HTTP-запросы:

POST /simpsons.json/5?_dc=1321377134028 HTTP/1.1

{"records":[{"id":5,"firstName":"Maggie"}]}

.

PUT /simpsons.json/2?_dc=1321377142625 HTTP/1.1

{"records":[{"id":2,"firstName":"Marjorie"}]}

.

DELETE /simpsons.json/1?_dc=1321377148457 HTTP/1.1

{"records":[{"id":1,"firstName":"Homer"}]}

Как и у каждой операции, есть собственный метод HTTP-запроса (глагол).

Когда я изменяю тип прокси с «rest» на «ajax», генерируемые HTTP-запросы выглядят так:

POST /simpsons.json?_dc=1321376787918 HTTP/1.1

{"records":[{"id":5,"firstName":"Maggie"}]}

.

POST /simpsons.json?_dc=1321376792207 HTTP/1.1

{"records":[{"id":2,"firstName":"Marjorie"}]}

.

POST /simpsons.json?_dc=1321376798158 HTTP/1.1

{"records":[{"id":1,"firstName":"Homer"}]}

Как вы можете видеть, они очень похожи.Это не проблема для операций вставки или обновления.Но как сервер может обнаружить, что последний HTTP-запрос не является ни вставкой, ни обновлением, а действием удаления ?

Я нашел параметр конфигурации "api" вSencha Touch 2.0 в том виде, в каком он существует в Ext JS 4, но я не нашел способа определить различные URL или параметры для конкретных действий прокси-сервера AJAX в Sencha Touch 1.1.

Любая помощь приветствуется.

Спасибо,

Уве

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Свойство actionMethods AjaxProxy по умолчанию установлено на

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

Вы можете просто перезаписать его:

store.getProxy().actionMethods = {
    create: "POST",
    read: "GET",
    update: "PUT",
    destroy: "DELETE"
};
2 голосов
/ 16 ноября 2011

Перейдите сюда http://docs.sencha.com/touch/1-1/#!/api/Ext.data.AjaxProxy, прокрутите вниз до генерации URL и прочитайте об объектах Ext.data.Operation и о том, как их использовать.

...