2013-01-02 15 views
10

我正在使用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中。

+0

你能夠建立一個演示頁? – Snuffleupagus

+0

我會嘗試一下,但是,只有當我使用ajax加載樹時纔會出現問題 - 如果我使用children屬性對json數據進行硬編碼,那麼它完美地工作。我不知道如何複製jsFiddle或類似的ajax調用。 – Kev

+0

jsfiddle有一個用於測試ajax的echo服務,文檔是[here](http://doc.jsfiddle.net/use/echo.html)。我會自己設置演示,但我相信你會得到更多的幫助。 – Snuffleupagus

回答

1

我發現爲什麼發生這種情況:

這是dynatree的錯誤 - 或者預期的行爲在那裏試圖太聰明。

如果子節點具有unselectable = true,則在加載子級時父級將被取消選定,即使父級具有select = true。這使得無法在選擇層次結構的情況下創建樹 - 即:如果選擇了父項,則將自動選擇所有子項,並且不能取消選擇。我想這可以作爲另一個「模式」添加到dynatree中。