近來在開發(fā)過程中我使用了ztree插件具钥,在使用過程中掉進(jìn)了一些坑里,有些用了很大的勁才爬出來趾疚。在此記錄下來没咙,以供以后查閱猩谊。
1.關(guān)于官方demo的查看
官方的demo只有一些簡要的信息,當(dāng)我們實(shí)際使用時很容易摸不著頭腦祭刚。事實(shí)上在我們下載的ztree壓縮包里预柒,有一個demo文件夾队塘,其展示效果與demo界面相對應(yīng)。通過查看相應(yīng)界面的源碼宜鸯,我們可以輕易實(shí)現(xiàn)demo所展示的效果
2.關(guān)于顯示自定義圖標(biāo)
根據(jù)官方的demo文檔,我寫出來的程序如下:
然而在頁面中出現(xiàn)了很詭異的狀況遮怜,即將鼠標(biāo)放到節(jié)點(diǎn)上可能觸發(fā)兩次addHoverDom事件淋袖,離開節(jié)點(diǎn)又可能觸發(fā)一次addHoverDom
但是官方文檔和網(wǎng)上其他人的顯示都很正常啊,后來對照著文檔一行行的看锯梁,終于發(fā)現(xiàn)問題在哪了,問題出在這一行:
此處條件判斷的id與我插入文本的id并不一致即碗,因此會顯示這樣的bug。此處我們可以看出陌凳,瀏覽器的onmouseover與api的顯示并不一致剥懒,因此需要加入額外的條件判斷來阻止圖標(biāo)的多次添加。
3.關(guān)于edit的回調(diào)函數(shù)
現(xiàn)在我想給rename功能加一個判定條件:即兄弟節(jié)點(diǎn)的名字不能相同合敦。然后根據(jù)demo初橘,我加了一個beforeRename的回調(diào)函數(shù):
運(yùn)行之后,我的瀏覽器就卡死了充岛。根據(jù)控制臺輸出顯示保檐,該函數(shù)一直在被反復(fù)調(diào)用,后來經(jīng)過調(diào)試崔梗,發(fā)現(xiàn)cancelEditName()函數(shù)會觸發(fā)beforeRename事件夜只。但demo不會因為這個原因卡死啊,然后蒜魄,進(jìn)一步分析是我的判斷條件的原因扔亥,父節(jié)點(diǎn)的children并不是隨著子節(jié)點(diǎn)的變化而變化的,而是一個常量:
這就導(dǎo)致我的判斷條件總會通過谈为,明白原因了問題自然很好解決旅挤,只要保證由cancelEditName()函數(shù)觸發(fā)的事件不能通過判斷即可,而該函數(shù)觸發(fā)的事件會使isCancel轉(zhuǎn)變?yōu)閠rue峦阁,故代碼如下: