Я изливал это часами, и мне еще предстоит продвинуться вперед, поэтому я надеялся, что один из замечательных обитателей SO сможет мне помочь. Вот проблема...
Я реализую дерево через плагин 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:hiddenfield (мы не можем использовать файлы cookie для этого типа вещей в нашем приложении).
по сути, операции с файлами 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, когда предпринимаются попытки операций сохранения. Есть ли способ отложить эти действия до полной загрузки дерева?