Я пролил это на несколько часов, и мне еще многое предстоит сделать, поэтому я надеялся, что один из замечательных обитателей СО сможет мне помочь. Вот в чем проблема ...
Я реализую дерево через плагин jstree для jQuery. Я извлекаю данные, которыми я заполняю дерево программно из нашего веб-приложения через json, выгруженный в asp: HiddenField, в основном так:
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = serializer.Serialize(Items);
json = json.ToLower();
data.Value = json;
Затем дерево вытягивает JSON из скрытого поля, чтобы построить себя. Это прекрасно работает до тех пор, пока я не попытаюсь сохранить данные, для которых узлы выбраны / открыты. Чтобы упростить мою проблему, я жестко закодировал некоторые данные json в дерево и попытался использовать плагин cookie для сохранения данных о состоянии дерева. Это не работает по любой причине. Я видел другие проблемы, когда людям нужно загружать плагины в определенном порядке и т. Д., Но это не решило мою проблему. Я попробовал ту же настройку с html_data, и она отлично работает. С этим рабочим постоянством я преобразовал плагин cookie, чтобы сохранить данные в другом поле asp: hidden (мы не можем использовать куки для такого типа вещей в нашем приложении.)
по сути, операции с cookie идентичны, он просто сохраняет массив узлов в качестве значения скрытого поля. Это работает с html_data, но не с json, и я еще не могу указать, где он выходит из строя.
Это замена jQuery.cookie.js:
jQuery.persist = function(name, value) {
if (typeof value != 'undefined') { // name and value given, set persist
if (value === null) {
value = '';
}
jQuery('#' + name).attr('value', value);
} else { // only name given, get value
var persistValue = null;
persistValue = jQuery('#' + name).attr('value');
return persistValue;
}
};
Код jstree.cookie.js идентичен, за исключением нескольких изменений имени переменной.
А это моё дерево:
$(function() {
$("#demo1").jstree({
"json_data": {
"data" : [
{
"data" : "A node",
"children" : [ "Child 1", "Child 2" ]
},
{
"attr": { "id": "li.node.id" },
"data" : {
"title": "li.node.id",
"attr": { "href": "#" }
},
"children": ["Child 1", "Child 2"]
}
]
},
"persistence": {
"save_opened": "<%= open.ClientID %>",
"save_selected": "<%= select.ClientID %>",
"auto_save": true
},
"plugins": ["themes", "ui", "persistence", "json_data"]
});
});
Данные хранятся надлежащим образом в скрытых полях, проблема возникает при обратной передаче, она не открывает заново узлы. Любая помощь будет принята с благодарностью.
Посмотрев еще раз, я просто хотел объяснить, что мне кажется, что проблема в том, что дерево еще не было построено из JSON_data, когда предпринимаются операции сохранения. Есть ли способ отложить эти действия до полной загрузки дерева?