Posted on 2007-12-25 21:11
久城 閱讀(8648)
評論(5) 編輯 收藏 所屬分類:
EXT&Extjs
至此圣誕佳節,漫寫學習筆記。
無意中接觸到的Extjs,還去baidu查了查什么是Extjs,隨之,被它酷酷的外表迷惑了,即使很多人在議論著它幾百K的胖客戶端所帶來的性能問題,依舊不會影響我學習它的心情。
對于Extjs的前景我沒資格談,也不想談,這個問題離我太遠。
Extjs就是一個js庫,里面封裝了很多常用的UI組件,目前的版本是2.0。
關于學習Extjs
官方網站:http://www.extjs.com/
這里當然是最好的學習Extjs的地方,里面有關于Extjs的Demo和文檔。而且,它的論壇的口碑也不錯,推薦英語猛的人可以去逛逛。
象我這種英語比較poor的人,學習起來就比較費勁了。
推薦一個中文論壇:http://jstang.5d6d.com
逛了兩天,感覺里面的一些資料很不錯,還居住著一些象frank這樣的牛人。
去官網上下載一個ext2.0的包,這個包里面就是要學的全部內容。
包里的docs和examples兩個文件夾就是Extjs的文檔和Demo,和網站上看到的是一樣的。
examples一般就是學習者的入口了,研究里面的幾個例子。
主要應用的幾個文件:
ext-all.js,adapter\ext\ext-base.js和resources下的全部,這是別人的一個推薦,沒什么標準,我感覺先排除一些文件,可以提高學習的效率。
關于學習Extjs的環境
myeclipse + spket插件 + firefox + firebug
對于firefox + firebug前幾天提過了,spket插件今天是第一次用,spket也可以作為一個獨立的IDE平臺。它的功能還不清楚,使用它是因為下載的Ext包里的js文件都是密密麻麻的無格式化的代碼。而spket中的ctrl + shift + f 讓我有一種熟悉的感覺,這樣在eclipse中可以清晰的看到js的結構。
學習內容
當初就是因為一個panel的實現,讓我接觸到的Extjs,這不是Extjs最引人的地方,卻是我學習的方向和入口。
看了大多數的學習筆記,首先要接觸的就是

Ext.onReady(function()
{
alert('hello world!');
});
這個是在DOM加載完之后執行的,也就是我們平時所常說的頁面加載完畢之后執行的,當然它應該屬于頁面加載的一部分。
onReady方法里的function可以看作一個匿名類對象。
還有一些常用的語法:
var myDiv = Ext.get('myDiv');
// 返回id為myDiv的Element對象
var ps = Ext.select('p');
// 返回id為p的Element對象數組,可以使用ps.each()進行遍歷。
Ext.get('myButton').on('click', yourClickFunction);
// 給myButton元素添加事件,yourClickFunction是一個function對象.
// more
學習ext-base.js
這個文件定義了Ext對象的基本結構
開始為Ext = {version : "2.0"};
此時Ext對象只有一個元素version,值為2.0.

Ext.apply = function(C, D, B)
{

if (B)
{
Ext.apply(C, B)
}

if (C && D && typeof D == "object")
{

for (var A in D)
{
C[A] = D[A]
}
}
return C
};
如果用我的js的思想來說,這里定義了Ext的apply元素為一個function對象。如果用java的類的思想來說,這里定義了Ext類的apply方法。(以下統一稱作方法)
apply這個方法,實現了把D,B中的元素都添加給C,然后返回添加后的C。
關于return,在網上學到的理解方式,就是return的部分屬于public的,而其余的部分屬于是private的,只在當前function中可見。
再后面Ext.apply(Ext, {.....});
這個{}的里面有很多內容,也就是利用Ext.apply給Ext對象添加了很多屬性和方法。
屬性如:isStrict : isStrictis,Secure : isSecure
方法如:

extend : function()
{

var io = function(o)
{

for (var m in o)
{
this[m] = o[m]
}
};

return function(sb, sp, overrides)
{

if (typeof sp == "object")
{
overrides = sp;
sp = sb;

sb = function()
{
sp.apply(this, arguments)
}
}

var F = function()
{
}, sbp, spp = sp.prototype;
F.prototype = spp;
sbp = sb.prototype = new F();
sbp.constructor = sb;
sb.superclass = spp;

if (spp.constructor == Object.prototype.constructor)
{
spp.constructor = sp
}

sb.override = function(o)
{
Ext.override(sb, o)
};
sbp.override = io;
Ext.override(sb, overrides);
return sb
}
}(),
這個extend方法后面會經常遇到。
Ext.ns("Ext", "Ext.util", "Ext.grid", "Ext.dd", "Ext.tree", "Ext.data",
"Ext.form", "Ext.menu", "Ext.state", "Ext.lib", "Ext.layout",
"Ext.app", "Ext.ux");
這里定義了Ext的命名空間,涵蓋了Ext的幾大牛B的對象,以后慢慢學。

Ext.apply(Function.prototype,
{

createCallback : function()
{

},

createDelegate : function(C, B, A)
{

},

defer : function(C, E, B, A)
{

},

createSequence : function(B, A)
{

},

createInterceptor : function(B, A)
{

}
});
這里為function的原型對象添加了五個方法。每一個function都有它的原型對象prototype,這樣定義之后,對于以后任何的function對象,都具有如上定義的五個方法。
如此分析ext-base.js的類,讀代碼時,才感覺到自己的javascript的基礎還是太差了。準備一邊學習Extjs,一邊補習javascript。
關于javascript知識點
this的用法
參考:
http://www.cnblogs.com/raymond19840709/archive/2007/10/30/942520.html
var的用法
參考:
http://www.cnblogs.com/birdshome/archive/2005/01/26/97885.html
一點積累,一點學習,一點想說的。
初學,歡迎交流,歡迎指正。
歡迎來訪!^.^!
本BLOG僅用于個人學習交流!
目的在于記錄個人成長.
所有文字均屬于個人理解.
如有錯誤,望多多指教!不勝感激!