我正在使用dynatree插件顯示覆選框樹,使用多選模式(模式3)。Dynatree在使用ajax時忽略選擇屬性
當樹使用ajax(沒有延遲加載)初始化時,它似乎忘記了一些節點最初被選中加載。當我選擇其中一個節點時,傳遞給onSelect處理程序的標誌值爲true,即:它認爲我想選擇節點。
當我再次單擊複選框時,將取消選擇。似乎在後臺選擇沒有註冊,直到我物理點擊複選框。我想加載這個節點已經選擇的節點。
我用來加載樹的json對我來說看起來很好; 選擇屬性對於有問題的節點即根節點是正確的。這裏是JSON的一個片段:
{
"expand":true,
"title":"All",
"isFolder":false,
"key":"0",
"isLazy":false,
"addClass":null,
"select":true,
"unselectable":false,
"children": [... omitted for clarity]
}
UPDATE
我加載樹是這樣的:
$("#locationsTree").dynatree({
checkbox: true,
selectMode: 3,
initAjax: {
type: "POST",
url: dynaTreeInitUrl
},
classNames:
{
nodeIcon: ""
}
});
其中dynaTreeInitUrl是返回JSON的URL。
如果我硬編碼的JSON像這樣:
$("#locationsTree").dynatree({
checkbox: true,
selectMode: 3,
children: {
"expand":true,
"title":"All",
"isFolder":false,
"key":"0",
"isLazy":false,
"addClass":null,
"select":true,
"unselectable":false,
"children": [{
"expand": true,
"title": "Child",
"isFolder": false,
"key": "1",
"isLazy": false,
"addClass": null,
"select": true,
"unselectable": true,
"children": []
}]
},
classNames:
{
nodeIcon: ""
}
});
它的工作原理。 :/
UPDATE:
我發現爲什麼發生這種情況:
這是dynatree的錯誤 - 或者打算在那裏試圖太聰明的行爲。
如果子節點具有unselectable = true,則在加載子級時父級將被取消選定,即使父級具有select = true。這使得無法在選擇層次結構的情況下創建樹 - 即:如果選擇了父項,則將自動選擇所有子項,並且不能取消選擇。我想這可以作爲另一個「模式」添加到dynatree中。
你能夠建立一個演示頁? – Snuffleupagus
我會嘗試一下,但是,只有當我使用ajax加載樹時纔會出現問題 - 如果我使用children屬性對json數據進行硬編碼,那麼它完美地工作。我不知道如何複製jsFiddle或類似的ajax調用。 – Kev
jsfiddle有一個用於測試ajax的echo服務,文檔是[here](http://doc.jsfiddle.net/use/echo.html)。我會自己設置演示,但我相信你會得到更多的幫助。 – Snuffleupagus