天天看點

prototype确實實用

今天解決一個bug時花了很長時間分析定位。

起因是我們自己寫了一個tab函數,用來支援網頁上分tab顯示内容,可以局部更新,支援緩存和重新整理。

但是後來發現,refresh content的時候采用AJAX方式取資料,而資料中的js腳本并不會執行。一開始不知道為什麼會這樣,我一直以為隻要設定innerHTML就會執行包含的js,單獨寫了兩個頁面用prototype的Ajax.updater試驗,也是可以執行的,真是搞不懂。

前輩教導我們,搞不定的時候讀源碼永遠是一個好主意。于是看prototype──哦,原來如此:

javascript 代碼  

  1. update: function(element, html) {  
  2.   html = typeof html == 'undefined' ? '' : html.toString();  
  3.   $(element).innerHTML = html.stripScripts();  
  4.   setTimeout(function() {html.evalScripts()}, 10);  
  5.   return element;  
  6. },  

設定innerHTML時并不會做什麼js的執行工作,其實是prototype幫我們完成了工作。真是實踐中凝結的代碼阿,它專門擴充了String類,添加了 stripScripts和 evalScripts,讓我們友善許多。

嗯,看來我這個半瓶子水還是要多看看源碼的。

繼續閱讀