我正在使用HandsOnTable在我的網站上使編輯數據庫表更具交互性。Handsontable在發佈之前用鍵替換自動完成值
HandsOnTable滿足幾乎所有我的要求,除了我的數據庫中的某些列實際存儲外鍵而不是本地字符串值。
在UI中,我希望這些列顯示爲下拉菜單,其中用戶選擇映射到前面提到的外鍵的可讀值(即,如HTML名稱/值select
)。
不幸的是,HandsOnTable沒有這樣的單元類型。最接近它的是autocomplete
。這允許我創建一個下拉列表,但它只包含值;沒有相應的鍵。下面是它是如何創建的:
"source": ["Jebediah", "Bob", "Bill", "Buzz"]
那麼我計劃是從服務器發送兩個的Json字符串:
一個含HandsOnTable所需的參數來渲染表:
{
"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"]}
]
}
第二映射鍵到值
{
"mappings": [
{"key": 0, "value": "Jebediah"},
{"key": 0, "value": "Bob"},
{"key": 0, "value": "Bill"},
{"key": 0, "value": "Buzz"}
]
}
到目前爲止好。現在到了棘手的部分:
HandsOnTable有一個函數(getData()
),讓我來檢索表中的數據作爲一個JSON字符串準備發送回服務器:
var jdata = myHandsOnTable.getData();
凡jdata看起來會像這樣:
"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" }
]
現在發佈之前,我想更換,對於與mappings
JSON字符串內的匹配對關鍵的Customer
節點值。
如何在JavaScript/JQuery中最好地實現這一點?
有如下?:
jdata.replaceNode('node', mappings)
感謝
感謝@PostureOfLearning,你可以澄清如下:如果我理解正確的用戶與'CategoryName'交互'autocomplete'類型的列和外部'dropdown/select''#CategoriesFilterDropdown'對用戶來說是不可見的,而是用來簡化映射過程。另外,你如何隱藏'CategoryID'列?你只是使用'渲染器'並將其'可見性'屬性設置爲'隱藏'? – Chopo87
@ Chopo87,請參閱我添加的「摘要」。作爲我的'映射工具',我使用了CategoriesFilterDropdown,它是可見的並位於頁面上的其他位置。我這樣做是因爲我需要下拉菜單用於其他目的,並且不需要複製數據。在你的情況下,你可能想要使用散列表來查找ID。 – PostureOfLearning
太棒了,非常感謝你@ PostureOfLearning !!! – Chopo87