我已经为此倾注了好几个小时,但我还没有取得很大进展,所以我希望 SO 的一位出色的居民可以帮助我。这就是问题所在...
我正在通过 jQuery 的 jstree 插件实现一棵树。我正在通过 json 从我们的 web 应用程序中以编程方式填充树的数据提取到一个 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 构建树。有没有办法将这些操作推迟到树完全加载之后?