編程血淚史之前端

2016.3.18
綁定函數在同類事件之前執行
  在優化前端性能時,突發奇想,想對不常使用的控件先不加載數據,在需要時再獲取數據。比如,對於一個表格的過濾框、一些需要從後臺取固定參數的選項框,在頁面加載時不獲取數據,當點擊時再獲取。
  當然,這是一個得不償失的改進,因爲本來對於頁面上這些框數據,就是使用ajax異步獲取的。砍掉異步,在用戶點擊時去獲取數據,那在數據還沒回來時怎麼展示?顯示空白,還是改同步,鎖死頁面讓用戶乾等着?這種策略本身不可取,權當教訓了。但在考慮實現時,有一點讓人感興趣,點擊事件已經存在,如何在同一個dom上新增一個點擊事件,且該事件在所有同類事件之前執行?
  jQuery1.8之前,使用$.data($('#id')[0],'events').click來獲取所有id爲id的dom上綁定的click事件,這是一個數組,按綁定先後順序執行,所以直接綁定函數,默認是在最後執行,當然,可以直接調整數組中元素(回調函數)的位置來改變函數執行的順序。jQuery1.8之後使用$._data($('#id')[0],'events').click獲取。
  
2016.3.19
累加事件——多次綁定回調函數
  使用SlickGrid繪製表格,發現刷新一次,表格的每條記錄都會累加,比上次繪製多畫幾次,多畫的次數爲表格的記錄總數。比如,表格中有2條記錄,第一次每一條記錄被重畫2次;刷新並重新獲取數據後每條記錄被重畫4次,然後是6,8,10…不斷累加。
  最初懷疑是數據源dataview的setItems函數中內置重繪,測試後排除。
  懷疑獲取數據的回調函數被綁定多次,設置斷定,打日誌後發現只調用了一次。
  最後發現是使用的update函數有問題,此函數爲內部封裝的函數,實際作用是給數據源綁定一個監聽函數,當數據源的數據變化時會調用此函數,而在代碼中使用時卻將它作爲一個即時的更新函數,每次更新都調用此函數,綁定監聽事件,所以會累積的越來越多。可以參考jQuery的bind方法來理解。從中也可以看到普及文檔的重要性!亂用函數就是浪費生命,團體殺手!

2016.3.19
頁面的返回按鈕
  做了一個需求,兩個頁面都會跳轉到同一個子頁面,在子頁面中返回按鈕需返回到進入的頁面。
  首先,window.history.back被排除,因爲作爲一個有追求的程序員,怎麼能用這麼low的方式,萬一人家複製url後,新開一個窗口,再點擊一下回退,那不就傻逼了。
  思前想後,最後決定在url上做文章,#viewA&common 與#viewB&common指向同一個頁面,#與&之間就是前一個頁面的地址,返回時通過window.location.hash取值,以此來跳轉。簡直是天才,坐等測試童鞋發現什麼驚天的bug……
  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章