W bardzo prosty sposób, wystarczy pomyśleć o trzech warstwach:
Grid
----
DataView
----
Data
Na dole masz surowych danych. To tylko zwykła stara tablica. Każda pozycja w tablicy reprezentuje jeden wiersz danych (wyświetlany jako jeden wiersz w siatce).
DataView odczytuje tablicę danych i udostępnia ją do siatki, ujawniając kilka standardowych metod. W ten sposób, gdy sieć chce uzyskać dane do celów wyświetlania, po prostu rozmawia z danymi za pomocą jednej ze standardowych metod.
Siatka jest elementem wyświetlacza. Jego jedynym zadaniem jest renderowanie kodu HTML niezbędnego do wyświetlania pożądanego wyniku na ekranie.
Siatka nigdy nie uzyskuje bezpośredniego dostępu do danych. Rozmawia tylko z danymi. Dzięki temu widok danych może wykonywać sztuczki podczas zwracania danych do siatki, na przykład dostarczając "fantomowe" wiersze używane do reprezentowania nagłówków grup.
Jeśli jesteś zainteresowany, poniższy przykład jest tylko najprostszym przykładem, jaki możesz wymyślić, wykorzystując widok danych z SlickGrid.
var data = [
{ title: "Primer", rating: "A" },
{ title: "Matrix", rating: "B" },
{ title: "Transformers", rating: "C" },
];
var columns = [
{ id: "title", name: "Title", field: "title" },
{ id: "rating", name: "Rating", field: "rating" }
];
var options = {
enableColumnReorder: false // ... whatever grid options you need
};
var dataView = new Slick.Data.DataView();
var grid = new Slick.Grid("#myGrid", dataView, columns, options);
// wire up model events to drive the grid
dataView.onRowCountChanged.subscribe(function (e, args) {
grid.updateRowCount();
grid.render();
});
dataView.onRowsChanged.subscribe(function (e, args) {
grid.invalidateRows(args.rows);
grid.render();
});
// Feed the data into the dataview
dataView.setItems(data);
Próbuję zdecydować, czy napisać niestandardową implementację DataView, czy też osobny model zapewniający operacje wejścia/wyjścia dla domyślnego DataView. Czy ktoś zbudował lub widział niestandardowy DataView? Nigdy go nie widziałem i chciałbym dokonać odczytu. – SimplGy
dane wymagają identyfikatora, inaczej spowoduje to błąd – Ammon