2012-09-13 125 views
1

在我的webapp中,我使用dynatree來顯示可以使用拖動&刪除(用於層次結構更改)和通過自定義鏈接(以更改項目狀態)編輯的數據樹。 每次更改都會在刪除或單擊鏈接後直接保存到數據庫中。如何刷新jquery dynatree而不再重新渲染它?

爲了防止樹及其後端模型由於任何情況而不同步,我想在每次修改後都完全更新樹。

我可以這樣做:how to reload/refresh/reinit DynaTree?。但是爲了做到這一點,我必須銷燬並重新初始化完整的樹,並在此過程中所有節點都崩潰。

我很喜歡遍歷所有樹項目的刷新選項,拋出不再存在的項目,添加新項目或更改修改後的圖標的標題/圖標/數據,但我無法在文檔。

有沒有什麼竅門可以實現這個目標?也許隱藏的功能,或解決方法?

感謝靈感, 彼得

回答

2

由於存在似乎沒有(至少我沒有找到)任何內置的功能,用於更新樹根據其支持JavaScript的數據(或它的一部分)對象,我寫了這個輔助方法來更新一棵樹(或它的一個分支):

編輯:當添加或刪除子項時,以前的方法實現不起作用。更新它放棄所有的childNodes,然後再添加所有的孩子:

function updateNodeRecursively(node, data, includeSelf) { 
    if(includeSelf == undefined) includeSelf = true; 
    if(includeSelf) node.data = data; 
    node.removeChildren(); 
    if(data.children) { 
     for(var i=0; i<data.children.length; i++) { 
     var cnode = node.addChild(data.children[i]); 
     updateNodeRecursively(cnode, data.children[i],false) 
     } 
    } 

它使用data相同結構的初始化JavaScript中的樹時,樹可以完全或部分更新使用,這取決於你是哪個節點作爲第一個參數傳遞。