動態載入頁面並執行的實例詳解
ExtJS 4.1 TabPanel動態載入頁面並執行腳本,寫這個東西我寫了好幾天,但是寫完之後就會有滿滿的成就感,我終於成功了,挺興奮的,下面就來向大家介紹我寫程式的整個過程。
依照官方範例,可以動態載入頁面,可是腳本不執行,於是查SDK、google,發現scripts需要設定為true,於是設定該屬性,整個程式碼如下
tabPanel.add({ title: 'dynamic page', closable: true, loader: { 'test.htm', loadMask: 'loading...', autoLoad: true, scripts: true } });
剛開始以為載入頁面的腳本寫的有問題,因為查了很多資料,有人說要寫在
裡面,有人說只能寫在頁面上,不能用src引用js文件,但無論怎麼試也不行,我的載入頁面很簡單,只要頁面被載入就出彈窗<script type="text/javascript"> alert("addd"); </script> 后来想,是不是需要在tab被激活的事件手工load,而不是autoLoad,于是再次实验,终于成功了,兴奋! tabPanel.add({ title: 'dynamic page', closable: true, loader: { 'test.htm', loadMask: 'loading...', autoLoad: true, scripts: true } listeners: { activate: function(tab){ tab.loader.load(); } } });
本來想著到此為止,一天時間總算搞定這個tab,但是興奮之餘發現,該做法是有問題的,每次點擊tab,都會觸發啟動事件,去讀取後台頁面一次,而我想要的效果是,前台載入一次之後,切換tab也不要再造訪後台。於是查SDK、google,想在activate事件裡,判斷tab已經load,但是未果
第二天,去掉了listeners,然後莫名其妙想測試加載頁面的loading效果,特意將頁面線程阻止,加入以下程式碼
System.Threading.Thread.Sleep(5000);
這次是無心插柳,發現隔了5秒載入的頁面,居然能正常執行腳本了!
我的操作步驟如下:點了載入按鈕,然後點選動態載入的tab,該tab無內容,隔了5秒,內容出現,腳本執行
但是被載入的頁面不能總是被sleep,於是繼續查資料繼續試,甚至開始調試extjs的源代碼,這裡說下如何調試,頁面切換以下腳本
<script type="text/javascript" src="/Scripts/ext/ext-all.js?1.1.11"></script>改为 <script type="text/javascript" src="/Scripts/ext/ext-debug.js?1.1.11"></script>
如何調試就不解釋了,google多的是,調試了一天,無果。不過對extjs的程式碼算是有了第一次親密接觸
而且還發現一個奇怪的事情,在調試的時候,就算加入了Sleep(5000),載入的頁面腳本也無法執行,越來越納悶
第三天,狂加QQ群,各論壇網站發帖,繼續google,無果
第四天,算是我點幸,用微軟的bing搜索autoload:true, scripts:true,出來的第條,就有這樣的介紹,不過是說extjs 4.0的panel如何載入頁面執行腳本的,於是依照它的程式碼測試
Ext.onReady(function () { var panel = Ext.create('Ext.Panel', { title: 'Anchor Layout', renderTo:Ext.getBody(), loader:{ url: "test.htm",autoLoad:true, scripts:true}//加载1.htm页面 }); });
該程式碼居然能成功執行!這下徹底興奮了,因為tab可以載入任意的component,當然也可以載入panel,於是修改我的程式碼
var panel = Ext.create('Ext.Panel',{ title: 'dynamic page', renderTo:Ext.getBody(), closable: true, loader: { 'test.htm', loadMask: 'loading...', autoLoad: true, scripts: true } }); tabPanel.add(panel);
成功了!真的狂喜,花費4天下來,總算是有個好的結果,這種喜悅,只有我們技術人員才能理解到
比較代碼差異,發現就少了這麼一個配置,就是我上面黃色標示出來的,renderTo:Ext.getBody(),居然,居然要被render一下,才能正常顯示腳本,為什麼SDK沒有! !
但是,但是…這也不是一個完美的解決辦法,細心的朋友就知道,該腳本會把加載頁面首先加載到主頁面上,切換tab才會消失,這麼嚴重的問題,因為當時太興奮,居然沒有發現,唉。
不得不停下來敲鍵盤的手,仔細思考起來,我有3次加載頁面執行腳本成功,這3次分別是
1、tab被activate的事件中
2、sleep之後點選tab等待頁面載入好
3、加入renderTo配置
經過長時間思考,終於發現這3次成功的時候,都有個共同點,載入的頁面被顯示出來了,也就說,如果tab先load頁面,然後再“被看見”,那腳本就不執行了
為了驗證我的想法,於是馬上動手測試,把sleep設為100毫秒,點選載入鈕,隔了1秒再去看載入出來的tab,果然腳本不執行了! ! !
總算找到原因:tab必須先「展現」出來,然後再去load,那這就簡單了,馬上查SDK,不難發現show這個方法,於是修改程式碼
tabs.add({ title: 'dynamic page', //renderTo: Ext.getBody(), loader: { url: 'test.htm', loadMask: 'loading...', autoLoad: true, scripts: true } }).show();
OK,腳本正常執行,到此我的問題「完美」解決
以上是動態載入頁面並執行的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務
