Trong điều kiện rất đơn giản, chỉ cần nghĩ đến ba lớp:
Grid
----
DataView
----
Data
Ở phía dưới bạn có các dữ liệu thô. Đây chỉ là một mảng cũ đơn giản. Mỗi mục trong mảng đại diện cho một hàng dữ liệu (được hiển thị dưới dạng một hàng trong lưới).
DataView đọc mảng dữ liệu và làm cho nó có sẵn cho lưới bằng cách phơi bày một vài phương pháp tiêu chuẩn. Bằng cách này, khi lưới điện muốn lấy dữ liệu cho mục đích hiển thị, nó chỉ nói chuyện với các dataview thông qua một trong những phương pháp tiêu chuẩn.
Lưới là thành phần hiển thị. Trách nhiệm duy nhất của nó là hiển thị mã HTML cần thiết để hiển thị đầu ra mong muốn trên màn hình.
Lưới không bao giờ truy cập dữ liệu trực tiếp. Nó chỉ bao giờ nói chuyện với các dataview. Điều này cho phép dataview thực hiện các thủ thuật khi trả lại dữ liệu vào lưới, chẳng hạn như phân phối các hàng "phantom" được sử dụng để đại diện cho các tiêu đề nhóm.
Nếu bạn quan tâm, ví dụ dưới đây chỉ là về ví dụ đơn giản nhất bạn có thể tìm ra bằng cách sử dụng một dataview với 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);
Tôi đang cố gắng quyết định có nên viết triển khai DataView tùy chỉnh hay mô hình riêng cung cấp I/O cho DataView mặc định. Có ai đã xây dựng hoặc nhìn thấy một DataView tùy chỉnh không? Tôi đã không bao giờ nhìn thấy một, và muốn làm một đọc qua. – SimplGy
dữ liệu cần một id hoặc người nào khác nó sẽ ném một lỗi – Ammon