С этой проблемой разобрался. Помог следующий код:
$("#form").submit(function () {
$("#categories_tree").jstree("get_checked").each(function() {
var checkedId = this.id;
$("#form").append('<input name="categories[]" value="'+checkedId+'" type="hidden">');
});
});
Но выползла другая проблема. Надо, чтобы, по мере выбора пунктов в категориях менялась аяксом отображаемая информация на сайте (список сущностей). Я это решил с помощью такого:
function init() {
$("#categories_tree").bind("change_state.jstree", function (event, data) {
getData();
}).jstree({
"core": {"initially_open": [1]},
"plugins": ["themes", "json_data", "checkbox"],
"json_data": {
"data": [{
"data": "Categories",
"attr": {"id": 1},
"state": "closed"
}],
"ajax": {
"url": "main/ajax_categories",
"data": function (n) {
return {"id": n.attr ? n.attr("id") : -1}
}
}
},
"themes": {
"theme": "classic"
}
});
}
function getData(page) {
var catIds = '';
$("#categories_tree").jstree("get_checked").each(function() {
catIds += this.id+',';
});
$.get(
'main/ajax',
{
page: page,
catids: catIds
},
showData
);
}
Все хорошо, однако, возникает один ньюанс. В дереве категорий могут быть заведомо чекнутые пункты, при первой загрузке страницы они игнорируются (вероятно, дерево jstree еще не успевает полностью загрузиться). Как повесить колбэк на событие полной загрузки дерева?
Пробовал на loaded.jstree вешать - оно срабатывает при каждом раскрытии ветки (когда идет ajax-подгрузка данных), но, вероятно, до того, как данные будут загружены, потому что опять же чекнутые пункты не отлавливаются
Помогите пожалуйста разобраться с проблемой.