Здравствуй, ЛОР!
Осваиваю веб-программирование на небольшом проекте. Имеется таблица с иерархией (т.е. поле parent_id в таблице БД), возникла необходимость представить эту информацию в наглядном виде, с отображением этой иерархии и возможностью сворачивать/разворачивать отдельные ее ветви, т.е. наподобие TreeView-виджетов различных GUI-тулкитов.
Нагуглил такую библиотеку на основе jQuery, предоставляющую необходимый виджет (посмотреть на него можно на странице примеров), почитал примеры, разобрался с отдачей данных в формате JSON. Все хорошо, все отображается, но возникла небольшая проблема с тем, чтобы заставить этот виджет работать как элемент формы (наподобие select). Проблема также усугубляется тем, что раньше с Javascript я не работал, и приходится осваивать его так сказать «по пути».
Я пока пришел к алгоритму, который хочу представить на ваш суд. В паре с каждым TreeView-виджетом будет идти hidden-поле, которое и будет определять значение (id в таблице БД) выбранного элемента, а при обработке события выбора элемента дерева (select) будет меняться значение этого поля. Но у меня возникли трудности с тем, как хранить id-шники (id не как html атрибут, а как идентификатор поля в БД) элементов вместе с названиями при генерации дерева, чтобы впоследствии использовать эти значения в обработчике. Единственный способ, который я придумал, использует поле template, которое определяет шаблон, по которому генерируются узлы дерева.
Суть в том, чтобы обернуть выводимый текст в некоторый тег TAG (кстати, какой тег можно использовать для этой цели?) с аттрибутом VALUE (соответствующий шаблон: «<TAG class='node-value' VALUE='#= item.id #'>#= item.text #</TAG>»), затем в обработчике искать ближайший к текущему узлу (параметр события, тип HTMLLIElement) элемент TAG с классом «node-value» и использовать значение его атрибута VALUE, на которое и будет меняться значение hidden-поля. Но это похоже на костыль.
Собственно, теперь сам вопрос: есть ли более правильный способ решить данную проблему?
Заранее спасибо.