? ? ? ? 首先不得不承認,對于ligerUI的認識,我看到的只是表面,畢竟我沒有深入到去看它的源碼,但這畢竟是我開發(fā)過程中遇到的一個問題,所以我還是分享給大家。
? ? ? ? 這是我開發(fā)中的一個小界面:



? ? ? ?有同事和我反應,有時候單擊上面的確定按鈕,沒有一丁點反應,就算重新打開第一個圖片的窗口,同樣沒反應,只能刷新鏈接重新打開,但是單擊取消按鈕,就沒有任何問題,我第一想法那就是可能我處理單擊確定按鈕后所執(zhí)行的代碼有問題,于是我就慢慢跟蹤了代碼,怪了,沒問題啊,總是能成功啊,沒任何問題啊,直到我試著點了一下 X 關閉彈框

? ? ? ? 再次打開彈框

? ? ? ? 然后怎么按確定都沒有反應

但是?。。?!看底層的代碼

? ? ? ? 因為是未定義,所以下面的代碼也就沒執(zhí)行,所以也就沒反應,怪了,那為什么是未定義呢?單擊彈框的X按鈕后,頁面到底經歷了一些什么可怕的東西,于是我屁顛屁顛的去看了ligerUI官網的demo,點確定和取消都沒有問題,但是單擊X關閉,在重新打開彈框后就有問題了。



? ? ? ? 那我們就看看demo的源碼吧

? ? ? ? 看demo的源碼,既然彈框,那說明源碼里!data=true;那么data有可能是false,null,undefined的一種,畢竟是demo,沒法debug跟蹤,但是我猜data是undefined,因為我的是undefined,而checkDataBool = itemCheckData();說明itemCheckData()沒有返回任何東西。

? ? ? ?而var itemCheckData = dialog.frame.f_itemCheckData || dialog.frame.window.f_itemCheckData;那么我們就看f_itemCheckData()方法就行了

? ? ? ? 然后在點X關閉重新打開彈框后,debug跟蹤一下

? ? ? ? 數據是空的,直接return,沒有返回任何值,所以checkDataBool是undefined,那么基本可以確定源碼中的data就是undefined,源碼也是沒有數據返回。連官網給出的demo都出這個問題,那怎么辦啊,去探索源碼?好怕好怕,沒那個時間啊,那先這樣吧,哈哈。
? ? ? 哈哈?那就這樣吧?官網都出的問題就不用管了么?但這畢竟是真實存在的問題啊,知難而退,臨陣逃脫不是我的風格,那就知難而進?不,知難不是進,而是智進,既然這樣,那我想啊,我代碼里點確定最后走的是框架的close()方法,沒問題,那點X有問題,那么點X底層走的方法肯定不是close()啦,所以呢,我進去框架里的ligerDialog.js看一眼,經過九九八十一難,我終于找到了框架里點X的點擊事件

? ? ? ? 咦,你們看到上面有兩個方法了么,g.hide();和g.close();既然點X沒有走g.close();那肯定是走g.hide()啦,那按照我們的想法,只要點X單擊事件走的是g.close();那么對于我們的需求來說,是沒問題的,是吧,那我們把源碼改么?把if干掉么?那怎么行,框架又不是為你這一個彈框服務的,你這么一改,其他的不就爆炸了?那怎么辦啊,哎呀,沒看到 if 里面的的p.isHidden么?p是什么?Lui,不想找,不是累,是lui,累就是累了,lui,那就是累得不得了了,之前找點X的單擊事件已經很累了,再找p?那就很lui了,不想找p,那就找isHidden吧,

? ? ? ? 這不就是Dialog源碼里面提供的參數么?再看注釋,原來之前在點X單擊事件里看到的2個方法g.hide();和g.close();前者是隱藏,后者是銷毀,既然這樣,那就去找ligerUI的API吧。

? ? ? ? 真是大快人心啊,Dialog有了這么一個參數,那就好辦了,在我需要的Dialog里面配上這么一個參數,設為false,那么底層點X單擊事件不就走else了么,接著走close()方法,這樣就和單擊確定的一致了,那就問題解決了。

? ? ? ? 再測試,好了,我的問題解決了,跟蹤也有數據了,我就不截圖給你看了,不過要按照你的需求來決定點擊X單擊事件是要隱藏還是摧毀哦,不要盲目加哦。
? ? ? ? 最后的最后,至于為什么隱藏我會出問題,寫到現在,我真的是太lui了,不想再進一步探索了,有時間再研究吧,不過我的猜測是這樣的,我點X隱藏后,這個東西還是存在的,只是隱藏了,看不見而已,當我再次彈框時,會重新彈框,那么實際上就會有多個彈框,這樣選數據的時候就會錯亂,那么,如果我的猜測是正確的話,那我也不一定加上isHidden這個參數,只要修改彈框功能,設一個變量,第一次彈新框,點X隱藏,點確定和取消也不要close()了,改為hide();這樣當我再次點擊的時候,根據變量就不要彈新框了,原來的框show()顯示就行了,哈哈,我沒有去試驗,只是這樣猜測,你們可以試試啊,睡覺睡覺。