ExtJS4的requires是新增的機制,主要是實作非同步載入機制。這樣在不點擊對應的按鈕或選項的時候就不會載入對應的js文件,提高了載入速度和使用者等待時間。
requires機制的實作透過一個Ext.Loader.setConfig函數來設定檔案尋找的映射目錄,然後在需要用到對應js檔案的時候使用Ext.require進行載入。
文件的儲存結構如下所示:
ux資料夾和lesson2.htm和lesson22.js在相同的目錄下,而使用到的MyWin.js則存放在ux的資料夾中。
在lesson2.html中的程式碼如下圖所示:
複製代碼代碼如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>extjs4 desktop</title>
<!-- css -->
<link rel="stylesheet" type="text/css" href="../../extjs4/resources/css/ext-all.css" />
<script type="text/javascript" src="../../extjs4/bootstrap.js"></script>
<script type="text/javascript" src="lesson22.js"></script>
</head>
<body>
<button id="myButton" align="center">show</button>
</body>
</html>
在該程式碼片中,並未載入ux目錄下的MyWin.js文件,那麼在載入該頁面的時候,並不會把MyWin.js檔案同時載入進來,只是在需要的時候再載入。這裡的需要是透過點擊button來實現的。
lesson22.js檔案內容如下:
複製代碼代碼如下:
(function(){
Ext.Loader.setConfig({
enabled:true, //開啟非同步載入模式
paths:{
myApp:'lesson2/ux' //宣告檔案的位置
}
});
Ext.onReady(function(){
Ext.require('ux.MyWin',function(){
var mw = Ext.create('ux.MyWin',{
title:'my Test'
});
Ext.get('myButton').on('click',function(){
mw.show();
});
});
});
})();
ux目錄下的MyWin.js檔案內容如下所示:
複製代碼代碼如下:
Ext.define('ux.MyWin',{
extend:'Ext.window.Window',
title:'sign up',
width:400,
height:300
});
注意:這裡的檔案名稱MyWin和函數名稱必須一樣,我試驗了一下,如果不一樣也會造成無法顯示。
剛開始我使用的方法是uspcat上的ExtJS4教學影片第二講的寫法進行書寫,但是始終無法出現我想要的結果,可能是版本問題,也可能是自己的問題,透過這樣修改,能夠使用requires方法了。特此為記,供有相同困惑的人使用。