Я не могу найти элегантный способ добавить источник базы данных в 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
свойство на каждый предмет.