Как сохранить новое jstree после перетаскивания?
Мои данные Jstree имеют следующую конфигурацию:
config_collection =
[
{
id: "1"
parent: "#"
text: "First Question"
},
{
id: "1.1"
parent: "1"
text: "First Answer"
},
{
id: "1.2"
parent: "1"
text: "Second Answer"
}
]
И моя установка Jstree:
$("#jstree_div").jstree({
'core' : {
'data' : config_collection,
'check_callback' : true,
'multiple' : false
},
'plugins' : [ 'dnd' ]
});
Это Jstree загружается правильно и имеет все основные функциональные возможности, пока я не перетащить. Мое настоящее дерево более сложное, но, скажем, я хочу поменять первый и второй ответ. Я могу использовать перетаскивание, чтобы сделать это, но когда я сохраняю и перезагружаю, ни одно из моих изменений не сохраняется. В настоящее время я пытаюсь закодировать все функциональные возможности, необходимые для изменения идентификаторов каждого затронутого узла, но это очень быстро становится очень сложным; Помимо кодирования этой функциональности, есть ли варианты, позволяющие мне сохранить эти изменения? Что-нибудь встроено в Jstree?
1 ответ
Для jsTree просто используйте
var config_collection = $('#ul_list_id_is_here').jstree(true).get_json('#', {flat:true});
другой подход, если вы хотите создать JSON из инструкции структуры структуры
изменить данные JSON как
config_collection =
[
{
id: "1"
parent: "#"
text: "First Question",
li_attr:{
"data-parent" : "#"
}
},
{
id: "1.1"
parent: "1"
text: "First Answer",
li_attr:{
"data-parent" : "1"
}
},
{
id: "1.2"
parent: "1"
text: "Second Answer",
li_attr:{
"data-parent" : "1"
}
}
]
это добавит атрибут data-parent к li и вызовет buildJson() для создания структуры li как json
var buildJson = function (root){
if(!root){
root='#ul_list_id_is_here';
}
var result = [];
// get first deepth of li list
$('ol:first > li',root).each(function() {
var itemdata = {};
//if you want to collect all attribute of li tag then use here
// $.each($(this).data(), function(key, value) {
// itemdata[key] = value;
// });
itemdata["id"] = $(this).attr('id');
itemdata["parent"] = $(this).attr('data-parent');
itemdata["text"] = $(this).text();
// check li does have children
if($(this).children("ol").length){
if($(this).find("ol li").length){
itemdata["children"] = buildJson($(this));
}
}
result.push(itemdata);
});
return result;
}
console.log(buildJson());