在為知筆記上的每日計(jì)劃已經(jīng)有好幾天沒(méi)有寫實(shí)際內(nèi)容了,抓狂臉。時(shí)間真是過(guò)得超級(jí)快呀,這幾天雙十一,瘋狂的看喜歡的東西和看快遞。其實(shí)并不是為了雙十一降價(jià)而買東西,而是近來(lái)本來(lái)就有買東西的打算,而且撞到了雙十一前,那就干脆放購(gòu)物車?yán)锖昧?,還有就是半年沒(méi)見(jiàn)降價(jià)的零食也打折啦啦啦~~^_^。好喜歡雙十一結(jié)束后淘寶的宣傳片《再見(jiàn)雙十一》,接下來(lái)的這個(gè)星期,就靜靜的等待幸福來(lái)敲門~

言歸正傳,今天來(lái)分享一下關(guān)于如何構(gòu)建數(shù)據(jù)結(jié)構(gòu)使得頁(yè)面邏輯更為清晰的思路。

事情的起因是這樣的,boss安排我做一個(gè)列表拖拽頁(yè)面,為了更貼切我們的UI和產(chǎn)品的需求,除了美化的滾動(dòng)條使用jquery.nicescroll插件外,不到萬(wàn)不得已不允許用其他插件(來(lái)點(diǎn)題外話:感覺(jué)我們公司一般不允許用插件,用boss的話來(lái)說(shuō)就是相信自己能寫出來(lái),根據(jù)項(xiàng)目寫出來(lái)的才是最貼切最精煉的代碼。不要一開(kāi)始就使用插件,如果實(shí)在寫不出來(lái)而使用插件,也得完全看懂代碼或者使用說(shuō)明,不要存在一知半解的僥幸心理,這樣相當(dāng)于給項(xiàng)目埋下定時(shí)炸彈)。

      我起初是用了對(duì)象加數(shù)組,各種全局變量加起來(lái)寫著寫著很容易把自己的代碼寫混了,然后把自己的困惑和boss說(shuō)了之后,boss給我提供了一種新的思路,讓我豁然開(kāi)朗,立即把頁(yè)面重寫了一遍。好東西就是要和大家分享的,下面我來(lái)分享一下這個(gè)方法。

 

      如圖所示,這個(gè)頁(yè)面的要求是能實(shí)現(xiàn)以最左邊一個(gè)虛擬的第0列作為根節(jié)點(diǎn),然后點(diǎn)擊三角形(非葉子節(jié)點(diǎn)的子節(jié)點(diǎn))實(shí)現(xiàn)橫向展開(kāi)收縮數(shù)據(jù)。每一層都是上一層的子節(jié)點(diǎn),在不同列的子節(jié)點(diǎn)中也可以相互拖拽,拖拽上一層節(jié)點(diǎn),下一層節(jié)點(diǎn)也跟著移動(dòng)(由于需要實(shí)現(xiàn)每一列都有一個(gè)相對(duì)的滾動(dòng)條的功能,所以不能把所有節(jié)點(diǎn)都實(shí)現(xiàn)繪制在一棵樹(shù)上通過(guò)show,hide展示。需要每展開(kāi)一列就立即構(gòu)建一個(gè)相對(duì)獨(dú)立的樹(shù))。除了拖拽,還需要能實(shí)現(xiàn)復(fù)制節(jié)點(diǎn)(子節(jié)點(diǎn)也隨之復(fù)制),刪除,編輯,添加子節(jié)點(diǎn),查看節(jié)點(diǎn)下所有葉子節(jié)點(diǎn)和本層葉子節(jié)點(diǎn)的功能。

把這些功能歸類,我們可以看到拖拽,刪除其實(shí)是對(duì)結(jié)構(gòu)的操作;編輯,查看是對(duì)數(shù)據(jù)的操作;復(fù)制,添加子節(jié)點(diǎn)這些既要求對(duì)樹(shù)操作,要求對(duì)數(shù)據(jù)進(jìn)行操作。

      當(dāng)我們把頁(yè)面的結(jié)構(gòu)和渲染分開(kāi)來(lái)的時(shí)候,頁(yè)面的脈絡(luò)會(huì)變得很清晰。

我們可以就事論事把這抽象的數(shù)據(jù)想象成,并構(gòu)建成一棵樹(shù),所有對(duì)樹(shù)結(jié)構(gòu)的修改都在樹(shù)的操作上完成,而所有對(duì)于節(jié)點(diǎn)內(nèi)容的修改,在另一組數(shù)據(jù)上完成,這樣能使頁(yè)面的結(jié)構(gòu)更為清晰,而且也便于檢查和維護(hù),不會(huì)存在定義了一堆變量,到最后,自己都忘了這個(gè)變量是用來(lái)干嘛的。

網(wǎng)友評(píng)論