Хранить содержимое с оставшимся прокси, указав неверный счет

ExtJS 5.1.x, с несколькими магазинами, использующими остальные прокси.

Вот пример:

Ext.define('cardioCatalogQT.store.TestResults', {
    extend: 'Ext.data.Store',
    alias: 'store.TestResults',
    config:{
        fields: [
            {name: 'attribute', type: 'string'},
            {name: 'sid', type: 'string'},
            {name: 'value_s', type: 'string'},
            {name: 'value_d', type: 'string'}
        ],
        model: 'cardioCatalogQT.model.TestResult',
        storeId: 'TestResults',
        autoLoad: true,
        pageSize: undefined,
        proxy: {
            url: 'http://127.0.0.1:5000/remote_results_get',
            type: 'rest',
            reader: {
                type: 'json',
                rootProperty: 'results'
            }
        }
    }
});

Этот магазин заполняется, когда в API происходят определенные вещи. После того, как хранилище заполнено, мне нужно сделать некоторые основные вещи, такие как подсчет количества отдельных экземпляров атрибута, скажем, sid, который я делаю следующим образом:

test_store =  Ext.getStore('TestResults');
n = test_store.collect('sid').length);

Проблема в том, что мне нужно обновить браузер, чтобы получить правильное значение 'n', в противном случае счетчик не верен. Я делаю test_store.load() и действительно, запрос отправляется на сервер после .load() выпущен.

Я непосредственно запрашиваю базу данных бэкэнда, чтобы увидеть, какие данные есть в таблице, и получить счетчик для сравнения со значением, данным test_store.collect('sid').length);, Странно то, что я также распечатываю объект хранилища в отладчике, и ожидаемые записи (по сравнению с содержимым в таблице базы данных) отображаются в data.items массив, но значение, данное test_store.collect('sid').length не является правильным.

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

Я проверил это с другим магазином, который использует остальные прокси, и у него такое же поведение. С другой стороны, использование прокси-сервера localStorage дает правильное количество в соответствии с записями хранилища / экземплярами модели.

Вот соответствующий код, о котором идет речь, Ajax-запрос срабатывает и делает свое дело правильно, и выполняет этот успешный обратный вызов. Там действительно не очень много интересного происходит... проблемный раздел после console.log('TEST STORE HERE'); где я получаю хранилище, распечатываю содержимое хранилища, загружаю / синхронизирую, затем печатаю хранилище (которое работает просто отлично) и, наконец, печатаю длину уникально сгруппированных элементов по sid атрибут (который не работает):

success: function(response) {
            json = Ext.decode(response.responseText);

            if(json !== null &&  typeof (json) !==  'undefined'){

                for (i = 0, max = json.items.length; i < max; i += 1) {

                    if (print_all) {
                        records.push({
                            sid: json.items[i].sid,
                            attribute: json.items[i].attribute,
                            string: json.items[i].value_s,
                            number: json.items[i].value_d
                        });
                    }
                    else {

                        records.push({
                            sid: json.items[i].sid
                        })
                    }

                }

                //update store with data
                store.add(records);
                store.sync();

                // only add to store if adding to search grid
                if (!print_all) {
                    source.add({
                        key: payload.key,
                        type: payload.type,
                        description: payload.description,
                        criteria: payload.criteria,
                        atom: payload.atom,
                        n: store.collect('sid').length // get length of array for unique sids

                    });
                    source.sync();
                }

                console.log('TEST STORE HERE');
                test_store = Ext.getStore('TestResults');
                test_store.load();
                test_store.sync();
                console.log(test_store);
                console.log(test_store.collect('sid').length)
            }

            // update grid store content
            Ext.StoreMgr.get('Payload').load();
            Ext.ComponentQuery.query('#searchGrid')[0].getStore().load();

        }

Для полноты, вот вывод массива data.items items:Array[2886]что эквивалентно количеству уникальных предметов, сгруппированных по атрибуту sid и, наконец, вывод console.log(test_store.collect('sid').length), который дает значение из ПРЕДЫДУЩЕГО запуска этого: 3114...

0 ответов

Другие вопросы по тегам