Есть ли способ прочитать хранилище объектов додзё и преобразовать его в объект массива JS?

Ищете способ прочитать все строки из ObjectStore расширенной сетки DOJO как объект JS Array.

OnRowClick, мне нужно получить все элементы в виде массива. Вот пример кода:

Макет, идентификатор определяются другими методами. Id — это первый заголовок.

В следующем коде хранилище — это хранилище данных.

function constructEnhancedGrid(jsObject) {
require(
    ["dojo/store/Memory", "dojo/data/ObjectStore",
        "dojox/grid/EnhancedGrid",
        "dojox/grid/enhanced/plugins/Pagination", "dojo/domReady!"
    ],
    function(Memory, ObjectStore, EnhancedGrid, Pagination) {

        jsGlobalObject = jsObject;
        jsObject = JSON.parse(jsObject);

        var objectStoreMemory = new Memory({
            data: jsObject,
            idProperty: [tableheaders[0]]
        });

        dataStore = new ObjectStore({
            objectStore: objectStoreMemory
        });

        constructEnhancedGridlayout(tableheaders);

        if (typeof rtGrid === "undefined") {
            rtGrid = new EnhancedGrid({
                store: dataStore,
                structure: enhancedGridLayout,
                plugins: {
                    pagination: {
                        pageSizes: ["10", "25", "50", "100"],
                        description: true,
                        sizeSwitch: false,
                        pageStepper: true,
                        gotoButton: false,
                        maxPageStep: 5,
                        position: "top",
                        defaultPageSize: 20
                    }
                },

            }, "rtGrid");
            rtGrid.startup();
        } else {
            rtGrid.setStructure(enhancedGridLayout);
            rtGrid.setStore(dataStore);
            rtGrid.currentPage(1);
            rtGrid.render(dataStore);
            rtGrid.startup();
        }
        dojo.connect(rtGrid, "onRowClick", function(e) {
            dataStore.fetch({
                query: {},
                onComplete: function(items) {
                    var resArray;
                    dataStore.objectStore.get().then(function(result) {
                        resArray = result;
                    });
                }
            });
        });
    });
}

person Ajay Kumar    schedule 02.02.2018    source источник


Ответы (1)


Обновленный ответ

Первоначально я предполагал, что вы используете JsonRest, но теперь я вижу, что вы используете объект Memory для заполнения своей сетки данных. Экземпляр памяти имеет атрибут data с массивом содержащихся в нем данных. Вы можете получить к нему доступ непосредственно в коде.

    grid.on("RowClick", function (e) {

            var data = this.store.objectStore.data;

        })
    });
person soeik    schedule 02.02.2018
comment
grid.store.objectStore.get() не возвращает все объекты. - person Ajay Kumar; 02.02.2018
comment
@AjayKumar, извините за путаницу. get() возвращает обещание, и вы можете получить из него необходимые данные. Я обновлю свой ответ. - person soeik; 02.02.2018
comment
На самом деле метод get() не возвращает никакого объекта. Вот ошибка для приведенного выше кода. Невозможно получить свойство "тогда" неопределенной или нулевой ссылки. Но get(id) дает объект. Было бы здорово, если бы я получал все объекты сразу без повторения. - person Ajay Kumar; 02.02.2018
comment
@AjayKumar Не могли бы вы добавить код в свой вопрос? Как вы создаете свою сетку и где вы пытаетесь получить результат. - person soeik; 02.02.2018
comment
Спасибо за быстрый ответ. Я хочу сказать, что this.store.objectStore.get() всегда возвращает значение undefined. - person Ajay Kumar; 02.02.2018
comment
Согласно документации Dojo 1.10 здесь нет get функция, которая не принимает параметров, как показано в этом ответе. Существует только функция get(id), которая получает идентификатор определенного объекта для извлечения. Нужно ли получить список всех идентификаторов и повторить их, чтобы вызвать get для каждого? - person takendarkk; 02.02.2018
comment
@csmckelvey Я попробовал это с додзё 1.10, и это работает. Нужно заглянуть в источник, чтобы уточнить. - person soeik; 02.02.2018
comment
@kirill-stepanov, я использую 1.10.4, не могли бы вы сказать мне полную версию. И согласно документации 1.10, этого метода не существует. Подниму как дефект на DOJO, чтобы выяснить эти несоответствия. - person Ajay Kumar; 05.02.2018
comment
@AjayKumar Потому что это не метод класса ObjectStore, а метод store.objectStore. Это выглядит запутанно, но я в своем примере использую JsonRest в качестве хранилища, поэтому, когда вы создаете экземпляр своего ObjectStore, вы передаете этот объект в качестве аргумента. Какой магазин вы используете для заполнения сетки? Не могли бы вы опубликовать полный код того, как вы храните cretae и экземпляр сетки. - person soeik; 06.02.2018
comment
@AjayKumar, теперь я понял, почему у вас нет метода get(). Я обновил свой ответ, надеюсь, теперь он сработает для вас. - person soeik; 06.02.2018