Ich verwende HandsOnTable, um die Bearbeitung von Datenbanktabellen auf meiner Website interaktiver zu gestalten.Handsontable Ersetzen Sie die Werte für die automatische Vervollständigung durch einen Schlüssel, bevor Sie die Nachricht senden.
HandsOnTable erfüllt fast alle meine Anforderungen mit der Ausnahme, dass einige Spalten in meiner Datenbank tatsächlich Fremdschlüssel statt lokale Zeichenfolgenwerte speichern.
In der Benutzeroberfläche möchte ich, dass diese Spalten als Dropdown-Menüs angezeigt werden, in denen der Benutzer einen lesbaren Wert auswählt, der dem zuvor erwähnten Fremdschlüssel zugeordnet ist (z. B. so etwas wie ein HTML-Name/Wert select
).
Leider hat HandsOnTable keinen solchen Zelltyp. Die nächste Sache ist autocomplete
. Dadurch kann ich ein Dropdown-Menü erstellen, das jedoch nur Werte enthält. keine entsprechenden Schlüssel. Hier ist, wie es erstellt:
"source": ["Jebediah", "Bob", "Bill", "Buzz"]
Also, was ich will, ist zwei Json Strings vom Server zu senden:
Einer der Parameter benötigt von HandsOnTable enthält die Tabelle zu machen:
{
"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"]}
]
}
Die zweite Kartierschlüssel auf Werte
{
"mappings": [
{"key": 0, "value": "Jebediah"},
{"key": 0, "value": "Bob"},
{"key": 0, "value": "Bill"},
{"key": 0, "value": "Buzz"}
]
}
so weit so gut. Jetzt für den schwierigen Teil:
HandsOnTable hat eine Funktion (getData()
), die ich die Tabellen Daten als JSON-String bereit abrufen kann an den Server gesendet werden, zurück:
var jdata = myHandsOnTable.getData();
Wo jdata etwas aussehen würde dies wie: Jetzt
"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" }
]
vor der Veröffentlichung, würde ich ersetzen möchte, dass die Werte für den Customer
Knoten mit ihren zusammenpassendes Paar Schlüssel innerhalb des mappings
json String.
Wie kann ich dies am besten in JavaScript/JQuery erreichen?
Gibt es eine Funktion, die etwas wie folgt ?:
jdata.replaceNode('node', mappings)
Dank
Dank @PostureOfLearning, könnten Sie folgendes klarstellen: Eine erweiterte Demo-bedingten Optionen in Ihrem Drop-Down-Verwendung finden Sie unter Wenn ich richtig der Benutzer interagiert mit dem 'CategoryName' verstehen Spalte mit dem Typ 'Autocomplete' und die externe' Dropdown/Auswahl '' #CategoriesFilterDropdown' ist für den Benutzer nicht sichtbar, sondern wird verwendet, um den Mapping-Prozess zu vereinfachen. Wie verstecken Sie die Spalte 'CategoryID'? Verwenden Sie einfach einen 'Renderer' und setzen Sie die css' Sichtbarkeit' Eigenschaft auf 'hidden'? – Chopo87
@ Chopo87, siehe die Zusammenfassung, die ich hinzugefügt habe. Als mein "Mapping-Tool" benutze ich CategoriesFilterDropdown, das sichtbar ist und sich irgendwo auf der Seite befindet. Ich mache das, weil ich das Dropdown für andere Zwecke sichtbar brauchte und die Notwendigkeit nicht hatte, die Daten zu duplizieren. In Ihrem Fall möchten Sie vielleicht eine Hashtabelle verwenden, um stattdessen die IDs zu suchen. – PostureOfLearning
Toll, vielen Dank @ PostureOfLearning !!! – Chopo87