Я использую HandsOnTable, чтобы сделать таблицы базы данных редактирования более интерактивными на моем сайте.Правильно Заменить значения автозаполнения ключом перед отправкой
HandsOnTable выполняет почти все мои требования, за исключением того, что некоторые столбцы в моей базе данных фактически хранят внешние ключи, а не локальные строковые значения.
В пользовательском интерфейсе я бы хотел, чтобы эти столбцы отображались в виде раскрывающихся меню, где пользователь выбирает читаемое значение, сопоставленное с ранее упомянутым внешним ключом (например, что-то вроде имени/значения HTML select
).
К сожалению, HandsOnTable не имеет такого типа ячейки. Самое близкое к этому - autocomplete
. Это позволяет мне создать выпадающий список, но он содержит только значения; нет соответствующих клавиш. Вот как он создается:
"source": ["Jebediah", "Bob", "Bill", "Buzz"]
Так что я планирую, чтобы отправить две строки JSON с сервера:
One, содержащий параметры, необходимые 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" }
]
Теперь перед публикацией, я хотел бы заменить, что значения для Customer
узла с их соответствием пара ключа в строке mappings
JSon.
Как я могу достичь этого в JavaScript/JQuery?
Есть функция, которая работает что-то следующим образом ?:
jdata.replaceNode('node', mappings)
Благодаря
Благодаря @PostureOfLearning, могли бы вы прояснить следующее: Если я правильно понял пользователь взаимодействует с 'CategoryName' который имеет тип 'autocomplete', а внешний' dropdown/select' '# CategoriesFilterDropdown' не является видимым для пользователя, а вместо этого используется для упрощения процесса сопоставления. Кроме того, как вы скрываете столбец «CategoryID»? Вы просто используете 'renderer' и устанавливаете свойство css' visibility' в 'hidden'? – Chopo87
@ Chopo87, см. «Резюме», которое я добавил. В качестве «инструмента отображения» я использую CategoryFilterDropdown, который отображается и находится где-то еще на странице. Я делаю это, потому что мне нужен раскрывающийся список, видимый для других целей, и не чувствовал необходимости дублировать данные. в вашем случае вы можете использовать хеш-таблицу для поиска идентификаторов. – PostureOfLearning
Отлично, большое спасибо @ PostureOfLearning !!! – Chopo87