本文地址: http://blog.csdn.net/sushengmiyan/article/details/38479079javascript
本文做者:sushengmiyanjava
-------------------------------------------------------------資源連接-----------------------------------------------------------------------編程
翻譯來源 Sencha Cmd官方網站: http://www.sencha.com/products/extjs/up-and-running/the-class-systemapp
------------------------------------------------------------------------------------------------------------------------------------------------框架
本篇指導旨在給想要建立或者從EXT JS 4.X或者EXT JS 5.X繼承已有類的任何開發者的。異步
-------函數
EXT JS 5自帶了有超過300的類,到目前爲止有200多萬的開發者在使用extjs開發,他們來自不一樣的地方,有不一樣的背景。因此這樣說來,在提供一份公共代碼結構上咱們就面臨着一個巨大的挑戰,這些代碼結構是:學習
1.你們都熟悉瞭解,簡單容易學習網站
2.開發迅速,調試方便,部署的時候也沒有痛苦this
3.有組織的,可擴展的,而且是可維護的
JavaScript是面向原型的類語言,其中一個最強大的功能就是自由,有好多的解決方案,可使用不一樣的編碼風格還有技術問題,可是這樣就會以不可預知爲代價了。沒有一個統一的結構,javascript代碼就很難理解,很難維護而且很差複用。
另外一方面,基於類的編程仍然是最流行的面向對象的編程模式,基於類的語言一般須要強類型,封裝和標準的編碼慣例,經過讓開發人員堅持大量的原則,代碼更多是可預測的,可擴展和可伸縮。然而,這個模型沒有JavaScript的動態能力。
每一個方法都有優勢和缺點,可是咱們能夠保持好的而壞的部分同時隱藏?答案是確定的,你能夠在Ext JS找到解決方案。
MyCompany.useful_util.Debug_Toolbar這個是被推薦的
MyCompany.util.Base64這個是能夠接受的
MyCompany.data.CoolProxy MyCompany.Application頂級名稱空間和實際的類名應該駝峯模式其它一切應該都小寫,例如:
MyCompany.form.action.AutoLoad不是使用sencha生成的類儘可能不要使用Ext做爲頂級空間。縮略詞也應該遵照駝峯預定定,如:
var MyWindow = Ext.extend(Object, { ... });這種方法很容易遵循以建立一個新的類繼承自另外一個。除了直接繼承,咱們沒有 其餘方面創造流暢的API 的類。這個排除諸如配置、靜態和mixins。咱們稍後將詳細回顧這些物品在本指南。
My.cool.Window = Ext.extend(Ext.Window, { ... });在本例中,咱們想咱們新類命名空間,並使其從Ext.window延伸。有兩個問題咱們須要解決:
xt.ns('My.cool'); My.cool.Window = Ext.extend(Ext.Window, { ... });第二個問題不容易解決,由於ext.window可能取決於許多其餘類。反過來,這些依賴關係可能依賴於其餘類的存在。出於這個緣由,Ext JS 4以前編寫的應用程序引入整個ext-all.js的形式,無論應用程序是否是隻須要一小部分的框架。
Ext.define(className, members, onClassCreated);className:類名
Ext.define('My.sample.Person', { name: 'Unknown', constructor: function(name) { if (name) { this.name = name; } }, eat: function(foodType) { alert(this.name + " is eating: " + foodType); } }); var aaron = Ext.create('My.sample.Person', 'Aaron'); aaron.eat("Salad"); // alert("Aaron is eating: Salad");注意:咱們建立了一個新的My.sample的實例。使用Ext.create()方法。咱們可使用新的關鍵字(new My.sample.Person())。不過建議獲得的習慣老是使用Ext.create由於它容許您利用動態加載。動態加載的更多信息參見入門指南
Ext.define('My.own.Window', { /** @readonly */ isWindow: true, config: { title: 'Title Here', bottomBar: { height: 50, resizable: false } }, applyTitle: function(title) { if (!Ext.isString(title) || title.length === 0) { alert('Error: Title must be a valid non-empty string'); } else { return title; } }, applyBottomBar: function(bottomBar) { if (bottomBar) { if (!this.bottomBar) { return Ext.create('My.own.WindowBottomBar', bottomBar); } else { this.bottomBar.setConfig(bottomBar); } } } }); /** A child component to complete the example. */ Ext.define('My.own.WindowBottomBar', { config: { height: undefined, resizable: true } });這是一個如何使用它的例子:
var myWindow = Ext.create('My.own.Window', { title: 'Hello World', bottomBar: { height: 60 } }); alert(myWindow.getTitle()); // alerts "Hello World" myWindow.setTitle('Something New'); alert(myWindow.getTitle()); // alerts "Something New" myWindow.setTitle(null); // alerts "Error: Title must be a valid non-empty string" myWindow.setBottomBar({ height: 100 }); alert(myWindow.getBottomBar().getHeight()); // alerts 100
Ext.define('Computer', { statics: { instanceCount: 0, factory: function(brand) { // 'this' in static methods refer to the class itself return new this({brand: brand}); } }, config: { brand: null } }); var dellComputer = Computer.factory('Dell'); var appleComputer = Computer.factory('Mac'); alert(appleComputer.getBrand()); // using the auto-generated getter to get the value of a config property. Alerts "Mac"
throw new Error('['+ Ext.getDisplayName(arguments.callee) +'] Some message here');當有錯誤在使用Ext.define時拋出的時候,你應該查看這個方法還有類的堆棧信息,你能夠看下谷歌Chrome中報錯的信息以下: