Я не могу найти элегантный способ добавить источник базы данных в dgrid

На данный момент у меня есть

require([
            "dojo/on", "dgrid/OnDemandGrid","dgrid/Tree","dgrid/Editor", "dgrid/Keyboard", "dojo/_base/declare",
            "dgrid/data/createHierarchicalStore", "data/projects_data",
            "dojo/domReady!"
        ], function(
            on, Grid, Tree, Editor, Keyboard, declare, createHierarchicalStore, hierarchicalCountryData
        ){
            var count = 0; // for incrementing edits from button under 1st grid

            function nbspFormatter(value){
                // returns " " for blank content, to prevent cell collapsing
                return value === undefined || value === "" ? " " : value;
            }

            var StandardGrid = declare([Grid, Keyboard, Editor, Tree]);

            window.grid = new StandardGrid({
                collection: createHierarchicalStore({ data: hierarchicalCountryData }, true),
                columns: [
                    {renderExpando: true, label: "Name", field:"variant_name", sortable: false, editor: "text", editOn: "dblclick"},
                    {label: "Visited", field: "bool", sortable: false, editor: "checkbox"},
                    {label:"Project", field:"project", sortable: false, editor: "text", editOn: "dblclick"},
                    {label:"locked", field:"locked", editor: "text", editOn: "dblclick"},
                    {label:"modified", field:"modified", editor: "text", editOn: "dblclick"},
                    {label:"summary", field:"summary", editor: "text", editOn: "dblclick"}
                ]
            }, "treeGrid2");

                grid.on("dgrid-datachange", function(evt){
                    console.log("data changed: ", evt.oldValue, " -> ", evt.value);
                    console.log("cell: ", evt.cell.row.id, evt.cell.column.field);
                });
                grid.on("dgrid-editor-show", function(evt){
                    console.log("show editOn editor: ", evt);
                });
                grid.on("dgrid-editor-hide", function(evt){
                    console.log("hide editOn editor: ", evt);
                });
        });

data/projects - это файл js, содержащий данные. но как теперь подключить этот dGrid к базе данных MySQL? Не могу найти хорошую информацию в документации. Я думаю, что может быть что-то с отдыхом JSON, но не уверен в этом.

Дополнение: я могу показать БД в таблице HTML. Есть ли подходящая возможность для заполнения dGrid из таблицы HTML?

Я все еще что-то упускаю. Иметь соединения из базы данных -> PHP, но не могу получить нужный JS для загрузки в dStore.

1 ответ

Решение

Простейший путь вперед - это написать сервис на выбранном вами серверном языке (в данном случае звучит как PHP), который генерирует вывод JSON на основе данных в вашей базе данных MySQL. В зависимости от потенциального размера ваших данных вы можете спроектировать их для работы с одним из двух готовых хранилищ в dstore: Request (а также Rest если операции записи также участвуют), или RequestMemory,

Более простой из двух RequestMemory, который просто сочетает в себе черты Memory хранить с предварительным запросом сервера (через Request). Это хранилище будет ожидать, что служба ответит одной полной полезной нагрузкой данных: массивом объектов, каждый из которых является записью в вашей базе данных. Что-то вроде этого:

[
    {
        "id": 1,
        "foo": "bar"
    },
    {
        "id": 2,
        "foo": "baz"
    }
]

Rest Хранилище ожидает данные в том же формате, но также ожидает, что служба будет обрабатывать фильтрацию, сортировку и диапазоны. Фильтрация и сортировка представлены через параметры строки запроса (например, foo=bar&baz=bim в простейшем случае для фильтра, и sort(+foo) или же sort(-foo) для сортировки), в то время как диапазоны обычно представлены через заголовок HTTP Range (например, Range: Items 0-9 за первые 10 пунктов).

Реализация услуги для Rest Хранение, очевидно, требует больше усилий, но было бы предпочтительнее, если вы ожидаете, что ваш источник данных может иметь тысячи элементов, поскольку RequestMemory не будет иного выбора, кроме как запросить все пункты заранее.

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

Если ваши данные предназначены для представления иерархической структуры, все равно должно быть возможно смешивать dstore/Tree в dstore/RequestMemory или же dstore/Requestпри условии, что ваша иерархия представлена ​​через ссылки родительского идентификатора. По умолчанию, Tree фильтрует детей через parent свойство на каждый предмет и отчеты mayHaveChildren результаты осмотра hasChildren свойство на каждый предмет.

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