Проблема ExtJS 4, пытаясь сделать обновление глубоко вложенных данных JSON - PullRequest
3 голосов
/ 22 августа 2011

Мои данные Json: -

{
    "attributes": { 
        "list": [
        {
            "name":"attribute2",
            "value":"attribute2 value"
        }, {
            "name":"attribute1",
            "value":"attribute1 value"
        }]
    }
    "name":"name1",
    "id":1234
}

Определение моего магазина: -

Ext.define('Attr', {
    extend: 'Ext.data.Store',
    model: 'Attribute',
    autoLoad: true,

    proxy: {
        type: 'rest',
        url: 'data/1234',
        api: {
            update: 'newdata/1234'
        },
        reader: {
            type: 'json',
            root: 'attributes.list'
        }
    }
});

Определение моей модели: -

Ext.define('Attribute', {
    extend: 'Ext.data.Model',

    fields: ['name','value']
});

Вид для отображениявыше хранилища: -

{
    xtype: 'grid',
    store: 'Attr',
    id: 'attrpanel',
    columns: [
    {
        header: 'Name',
        sortable: true,
        dataIndex: ['name'],
        flex: 1
    }, {
        header: 'Value',
        sortable: true,
        dataIndex: ['value'],
        flex: 1
    }]
}

Текущая ситуация : я могу отображать значения данных из объекта Json.

Проблема : Всякий раз, когда я звонюthis.getAttrStore (). sync () в моем контроллере после редактирования полей я получаю сообщение об ошибке.Я просмотрел несколько форумов и понял, что при обновлении глубоко вложенных данных JSON возникла какая-то проблема.

Я думал о том, чтобы получить патч Питера Мюллера, но на самом деле я не сделал этого.* Пожалуйста, поправьте меня, если я ошибаюсь или вы могли бы указать мне на что-то полезное, это было бы большой помощью.

Большое спасибо!

Ответы [ 3 ]

1 голос
/ 19 октября 2011

Насколько я понимаю, Ext JS 4.0 может поддерживать чтение вложенного JSON, но, похоже, не поддерживает отправку того же JSON. У меня есть эта проблема, где Order содержит OrderItems. Ext может прочитать это хорошо, но вызов Order.Save не будет включать элементы.

Это сообщение ни в коем случае не является окончательным, поскольку команда сенчи не ответила на него, но пользователь, кажется, говорит, что он просто не поддерживается.

http://www.sencha.com/forum/showthread.php?144653-ExtJS-4-updating-deeply-nested-Json-Data

1 голос
/ 21 июня 2013

У меня была та же проблема, и я прекратил использовать решение с форумов Sencha от beachdog . Он использует переопределение, чтобы применить связанные данные к записи перед ее сохранением:

Ext.define('custom.JsonWriterOverride', {
    override: 'Ext.data.writer.Json',

    getRecordData: function(record) {
            Ext.apply(record.data,record.getAssociatedData()); // <--
            return record.data;
    }
});

Затем вы можете использовать переопределение в качестве требования в ваших моделях, например:

Ext.define('My.model.Query', {
   extend: 'Ext.data.Model',

    requires: ['custom.JsonWriterOverride'], // <--
 ...
  proxy: {
        type: 'rest',
        url: 'webApp/query.do',
        reader: {
            type: 'json',
            root: 'data'
        },
        writer: {
            type: 'json',
            writeAllFields: true
        }
    }
 });

ИМХО, элегантное и простое решение; все кредиты идут на beachdog.

0 голосов
/ 23 августа 2011

Какую ошибку вы получаете?Вы получаете эту ошибку до или после HTTP-запроса?Какой ответ отправляет сервер?

В любом случае, я предлагаю настроить писателя для вашего прокси.

...