Tôi đang sử dụng HandsOnTable để làm cho các bảng cơ sở dữ liệu chỉnh sửa tương tác hơn trên trang web của tôi.Có thể thay thế được giá trị tự động hoàn thành bằng khóa trước khi đăng
HandsOnTable đáp ứng gần như tất cả các yêu cầu của tôi ngoại trừ một số cột trong cơ sở dữ liệu của tôi thực sự lưu khóa ngoài thay vì giá trị chuỗi cục bộ. Trong giao diện người dùng, tôi muốn các cột này xuất hiện dưới dạng menu thả xuống trong đó người dùng chọn giá trị có thể đọc được ánh xạ tới khóa ngoại đã đề cập trước đó (ví dụ: tên/giá trị HTML select
).
Thật không may, HandsOnTable không có loại ô như vậy. Điều gần nhất với nó là autocomplete
. Điều này cho phép tôi tạo một menu thả xuống, nhưng nó chỉ chứa các giá trị; không có khóa tương ứng. Sau đây là cách nó được tạo ra:
"source": ["Jebediah", "Bob", "Bill", "Buzz"]
Vì vậy, những gì tôi đang lên kế hoạch là để gửi hai chuỗi Json từ máy chủ:
Một chứa các thông số cần thiết bởi HandsOnTable để render bảng:
{
"data": [
{ "ID": 1, "Description": "Crude", "Volume": 204, "Customer": "jebediah" },
{ "ID": 2, "Description": "Hidrogen", "Volume": 513, "Customer": "Bob" },
{ "ID": 3, "Description": "Coal", "Volume": '67', "Customer": "Bill" },
{ "ID": 4, "Description": "Wood", "Volume": '513', "Customer": "Buzz" }
],
"columns": [
{ "data": "ID", "type": "numeric" },
{ "data": "Description", "type": "text"},
{ "data: "Volume", "type": "numeric" },
{ "data": "color", "type": "autocomplete", "strict": "true",
"source": ["Jebediah", "Bob", "Bill", "Buzz"]}
]
}
Các phím lập bản đồ thứ hai để các giá trị
{
"mappings": [
{"key": 0, "value": "Jebediah"},
{"key": 0, "value": "Bob"},
{"key": 0, "value": "Bill"},
{"key": 0, "value": "Buzz"}
]
}
cho đến nay rất tốt. Đây là phần khó khăn:
HandsOnTable có một chức năng (getData()
) cho phép tôi để lấy dữ liệu bảng như là một chuỗi Json sẵn sàng để được gửi lại cho máy chủ:
var jdata = myHandsOnTable.getData();
đâu jdata sẽ giống như thế này:
"data": [
{ "ID": 1, "Description": "Crude", "Volume": 204, "Customer": "jebediah" },
{ "ID": 2, "Description": "Hidrogen", "Volume": 513, "Customer": "Bob" },
{ "ID": 3, "Description": "Coal", "Volume": '67', "Customer": "Bill" },
{ "ID": 4, "Description": "Wood", "Volume": '513', "Customer": "Buzz" }
]
Bây giờ trước khi gửi bài, tôi muốn thay thế mà giá trị cho các Customer
nút với cặp khóa phù hợp của họ trong chuỗi mappings
json.
Làm cách nào để đạt được điều này tốt nhất trong JavaScript/JQuery?
Có một chức năng mà làm việc gì đó như sau ?:
jdata.replaceNode('node', mappings)
Cảm ơn
Cảm ơn @PostureOfLearning, bạn có thể làm rõ như sau: Nếu tôi hiểu đúng người dùng tương tác với 'CategoryName' cột thuộc kiểu 'autocomplete' và' dropdown/select' bên ngoài '# CategoriesFilterDropdown' không hiển thị cho người dùng, mà thay vào đó được sử dụng để đơn giản hóa quá trình ánh xạ. Ngoài ra, làm cách nào để ẩn cột 'Danh mụcID'? Bạn có sử dụng 'renderer' và đặt thuộc tính css' visibility' thành 'hidden' không? – Chopo87
@ Chopo87, xem phần 'tóm tắt' tôi đã thêm vào. Là 'công cụ lập bản đồ' của tôi, tôi sử dụng CategoryFilterDropdown có thể nhìn thấy và đặt ở một nơi khác trên trang. Tôi làm điều này vì tôi cần trình đơn thả xuống hiển thị cho các mục đích khác và không cảm thấy cần phải sao chép dữ liệu. trong trường hợp của bạn, bạn có thể muốn sử dụng một hashtable để tra cứu các ID thay thế. – PostureOfLearning
Tuyệt vời, Cảm ơn bạn rất nhiều @ PostureOfLearning !!! – Chopo87