Как изменить объект необработанных данных, возвращаемый прокси Ext JS AJAX, в объект JSON, который будет использоваться хранилищем дерева - PullRequest
0 голосов
/ 07 февраля 2020

Чтобы создать древовидную панель, я настраиваю ее на хранилище деревьев, чей URL-адрес прокси-сервера AJAX получает json данных, которые я не контролирую. Но использование Ext.data.reader.Json transform свойства , вызываемого перед выполнением readRecords, дает возможность изменить переданный объект необработанных (десериализованных) данных из прокси AJAX в измененный или совершенно новый объект данных , В конфигурации transform приведен фрагмент кода ниже:

Ext.create('Ext.data.Store', {
    model: 'User',
    proxy: {
        type: 'ajax',
        url : 'users.json',
        reader: {
            type: 'json',
            transform: {
                fn: function(data) {
                    // do some manipulation of the raw data object
                    return data;
                },
                scope: this
            }
        }
    },
});

Я бы хотел привести пример, как go изменить тип возвращаемого объекта JSON

[
{
    "id": 3,
    "attributes":
    {},
    "name": "user_one",
    "login": "",
    "email": "user_one@ats",
    "phone": "0751223344",
    "readonly": false,
    "administrator": false,
    "password": null
},
{
    "id": 4,
    "attributes":
    {},
    "name": "user_two",
    "login": "",
    "email": "user_two@ats",
    "phone": "0751556677",
    "readonly": false,
    "administrator": false,
    "password": null
}
]

в JSON объект, подходящий для хранилища деревьев.

Иерархическое дерево должно отображаться, чтобы показать, к какому пользователю относится администратор, используя условие administrator==true из возвращенного JSON, затем второго AJAX запрос, который возвращает администраторов, показанных здесь.

[
    {
        "user_id": 3,
        "admin_id": 1,
    },
    {
        "user_id": 4,
        "admin_id": 2,
    }
    ]

1 Ответ

0 голосов
/ 07 февраля 2020

Вложены ли данные вообще? Иначе зачем использовать древовидную панель вместо сетки? На ваш вопрос, однако, это будет зависеть от того, как вы настроите свою древовидную панель, но это, вероятно, будет что-то вроде этого:

        transform: {
            fn: function(data) {
                var treeRecords = Ext.Array.map(data, function(i){
                    return {
                        text: i.name,
                        leaf: true
                        //any other properties you want
                    }
                });

                var treeData = {
                    root: {
                        expanded: true,
                        children: treeRecords
                    }
                };

                return treeData;
            },
            scope: this
        }
...