最近在做啟明星圖庫時,使用了Jquery Bootstrap Treeview插件。但是,遇到了一個初始化的問題。先看效果如下:
當用戶打開圖庫時,左邊分類第一個類別是“所有分類”,默認需要選中。

TreeView的數據源來自后台JSON格式,如下:因為分類的數據庫格式是ID格式,且是整數自增行。所有,在生成JSON時,會強制在JSON頭部增加一個ID為-1的類別,表示“所有分類”
[{"href":"#-1","link":"false","text":"所有類別","c":"1"},{"href":"#1","link":"false","text":"公司活動","c":"1"},{"href":"#2","link":"false","text":"部門活動","c":"1",
"nodes":[{"href":"#3","link":"false","text":"人事部圖庫","c":"1"},
{"href":"#4","link":"false","text":"財務部圖庫","c":"1"}]},{"href":"#5","link":"false","text":"其它活動","c":"1"}]
但是,直接把JSON數據源賦值給treeview,第一行並不會默認選中。
最后修改代碼如下:
$(document).ready(function ()
{
var aj = $.ajax({
url: 'treejson.aspx?initcatid='+<%=Request.QueryString["catid"]%>,
cache: false,
dataType: 'json',
success: function (datasource) {
$('#tree').treeview({
levels: 2,
data: datasource,
enableLinks: false,
onNodeSelected: function (event, key) {
alert("node click"); }
});
var id = -1;
var treeViewObject = $('#tree').data('treeview'),
allCollapsedNodes = treeViewObject.getCollapsed(),
allExpandedNodes = treeViewObject.getExpanded(),
allNodes = allCollapsedNodes.concat(allExpandedNodes);
for (var i = 0; i < allNodes.length; i++) {
if (allNodes[i].href != ("#"+id))
{
continue;
}
var selectNode = allNodes[i];
$('#tree').treeview('revealNode', [selectNode, { silent: true }]);
treeViewObject.selectNode(selectNode);
break;
}
}
,
error: function () {
alert("異常!");
}
});
在代碼里,增加了初始化選中的ID,例如通過URL傳遞 catid=2,表示我打開這個網址時,類別ID為2的 部門活動需要被選中 ,效果如下圖
請注意代碼里的: $('#tree').treeview('revealNode', [selectNode, { silent: true }]); 這句話讓樹的節點自動展開。例如如果你設置樹默認只展開level為1,而你需要展開的節點在2級,
那么'revealNode'將會把該節點自動展開。

