昨天把一個 TreePanel 改成 TreeGrid 後,測試過大部分的程式碼都不需要修改,只要在 TreeGrid 本身的設定增加欄位在樹上直接新增、刪除、修改節點的功能做好了,可是發生一件相當尷尬的事:拖曳最底層的葉節點 (leaf node),原本可以排序,竟然不能用了!

原本懷疑是 TreeGrid 閹割了部分 TreePanel 的功能,但在 Google 改了好幾組關鍵字查解決辦法,沒什麼人碰到這個問題,所以我想應該不是什麼特別奇巧的 bug。認份的把 ExtJS 3.3.1 版原始檔裡的範例資料夾 (\examples) 裡面的 tree 與 grid 的範例通通打開來,挑出可以拖動節點的範例來比較。



觀察的過程發現 tree\two-trees.html 這個範例也不能調整排序,但 tree\reorder.html 這個範例就可以調排序。兩相比較之下,發現 two-trees 增加了拖放的設定值。

dropConfig: {appendOnly:true}

因為我是想要「可以調整排序」,所以逆向操作,在 TreeGrid 裡加上 appendOnly: false 的設定,之後就可以拖動節點排序了。



不過奇怪的是,安排好新的順序之後,節點又會快速的跳回原位置。再四處研究了一下,發現有一個設定值是可以關掉排序的。

enableSort: false

趕快把排序關掉,喔,好了沒事了。原來節點會跳回原位置,是因為被強制依名稱排序了,難怪怎麼拉都無法乖乖定位。



arrow
arrow
    全站熱搜

    小攻城師 發表在 痞客邦 留言(0) 人氣()