MyCompany.data.CoolProxy MyCompany.Application
Ext.util.Observable
is stored in path/to/src/Ext/util/Observable.js
Ext.form.action.Submit
is stored in path/to/src/Ext/form/action/Submit.js
MyCompany.chart.axis.Numeric
is stored in path/to/src/MyCompany/chart/axis/Numeric.j
path/to/src代表工程的类目录。所以类都应该位于这个根目录下。,
parseXmlContent() 而不是
parseXMLContent()Ext.MessageBox.YES = "Yes"
Ext.MessageBox.NO = "No"
MyCompany.alien.Math.PI = "4.13"
var MyWindow = Ext.extend(Object, { ... });
这种方法的好处是容易创建一个继承自另一个类的新类,而不是直接继承。however, we didn't have a fluent API for other aspects of class creation, such as configuration, statics and mixins.
如:My.cool.Window = Ext.extend(Ext.Window, { ... });
如果要对这个新类设置名字空间,并且让它继承自Ext.Window。必须强调两点:
a, 在将Window指定为Mycool的属性之前,My.cool必须是一个一个已经存在的对象。
b,Ext.window在被引用之前必须存在或者加载。
第一点使用Ext.namespace(Ext.ns)解决。不爽的是你必须永远记住在Ext.extend之前加入名字空间。
Ext.ns('My.cool'); //这句不能少。 My.cool.Window = Ext.extend(Ext.Window, { ... });
为了解决第二点,在extjs4.0之前,需要包括ext-all.js,那怕我们只用到extjs框架的一小部分。
在extjs4.0中,可以通过一个方法Ext.define消除这些不足之处,基本语法如下:
Ext.define(className, members, onClassCreated);
className
: 类名members
:类的成员,以key-value形式存储在一个集合中。onClassCreated
:可选的回调方法,它将在此类所有的依赖全部准备好后调用,这个方法很多场合相当有用。Ext.define('My.sample.Person', { name: 'Unknown', constructor: function(name) { if (name) { this.name = name; } return this; }, eat: function(foodType) { alert(this.name + " is eating: " + foodType); return this; } });
var aaron = Ext.create('My.sample.Person', 'Aaron');
//
new My.sample.Person()
)同样也可以的,但是推荐Ext.create()
方法,后者可以利用动态加载机制。 aaron.eat("Salad"); // alert("Aaron is eating: Salad");
(2),配置extjs4.0引入一种专门的config属性。特点如下:配置信息完全从其他类成员封装。如果类的Gettert和Setter方法没有定义,那么在创建这些类的时候,类的配置属性的getter和setter会自动生成。
Ext.define('My.own.Window', { /** @readonly */ isWindow: true, config: { title: 'Title Here', bottomBar: { enabled: true, height: 50, resizable: false } }, constructor: function(config) { this.initConfig(config); return this; }, 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 && bottomBar.enabled) { if (!this.bottomBar) { return Ext.create('My.own.WindowBottomBar', bottomBar); } else { this.bottomBar.setConfig(bottomBar); } } } });
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"
(3) 静态
静态成员采用static 属性设定。
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 }, constructor: function(config) { this.initConfig(config); // the 'self' property of an instance refers to its class this.self.instanceCount ++; return this; } }); 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" alert(Computer.instanceCount); // Alerts "2"
4 错误处理和调试
采用
Ext.getDisplayName()显示任何方法的名字