原文:Small Fire · Ext.js 基础知识 · 前端 子专栏 · Small Fire 技术笔记

Ext.js简介

Ext JS是一个JavaScript框架,它具有面向对象编程的功能。它为使用跨浏览器功能构建Web应用程序提供了丰富的UI。 Ext JS基本上用于创建桌面应用程序它支持所有现代浏览器。

Ext 是封装 Ext JS 中所有类的命名空间

Ext.js 命名规范

Ext JS中的命名约定遵循标准JavaScript约定,这不是强制性的,而是遵循的良好做法。

它应该遵循camel case语法命名类,方法,变量和属性。

如果name与两个单词组合,则第二个单词将始终以大写字母开头。

名称惯例
Class Name以大写字母开头,然后是camel case E.g. StudentClass
Method Name以小写字母开头,然后是camel case E.g. doLayout()
Variable Name以小写字母开头,然后是camel case E.g. firstName
Property Name以小写字母开头,然后是camel case E.g. enableColumnResize = true
Constant Name只有大写,E.g. COUNT, MAX_VALUE

在Ext JS中定义类

Ext.onReady 是指在整个页面加载完后执行:

<script type="text/javascript">
  Ext.onReady(function(){
  //页面初始化代码
  });
</script>

Ext.define() 用于在Ext JS中定义类。

Ext.define(class_name, class_members/properties, callback_function);

  • class_name:是根据应用程序结构的类名称 - appName.folderName.ClassName
  • 类属性/成员:定义类的行为。
  • 回调函数是可选的:当类正确加载时,会调用它。

Ext JS 定义类

Ext.define("Person", {
    //定义、初始化成员属性
    name: '',
    age: 0,
    //定义成员方法
    say: function (msg) {
        Ext.Msg.alert(this.name + " Says:", msg);
    },
    //定义构造函数
    constructor: function (name, age) {
        this.name = name;
        this.age = age;
    }
});

创建对象

由两种方式可以创建对象:

  • 使用 new 关键字

    • var studentObject = new Person();
  • 使用 Ext.create() 方法创建

    • Ext.create('Ext.Panel', {
          renderTo: 'helloWorldPanel',
          height: 200,
          width: 600,
          title: 'Hello world',
          html: 'First Ext JS Hello World Program'
      });
      

继承

ExtJS 允许对现有的类进行扩展,其扩展可以通过继承来实现。

在Ext JS继承可以使用两种方法:

  • Ext.extend

    • //基类
      Ext.define("Developer", {
          extend: 'Person',        //继承
          coding: function (code) {
            Ext.Msg.alert(this.Name + " 正在编码..", code);
          },
          constructor: function(){
              this.callParent(arguments);
          }
      });
      
  • 使用Mixins : Mixins是在没有扩展的情况下在类B中使用类A的不同方式。

    • mixins : {
         commons : 'DepartmentApp.utils.DepartmentUtils'
      },
      

在构造函数中,通过调用 this.callParent()方法,实现对属性的初始化。如果此处只调用了父类的构造方法,则可以省略掉,ExtJS 会自动为我们调用父类的构造函数。

如果在子类中使用了自定义的构造函数,ExtJS 则不会再自动调用父类的构造函数。

像java导包一样,在html中要导入父类的js文件。

类的选项 - config

可以在定义类的时候为它添加配置项—— config,它是Extjs的属性包装器,为属性提供get和set方法。

Ext.onReady(function(){
    Ext.define("Person", {
        config: {
            name: '',
            age: 0
        },
        say: function (msg) {
            //在方法中,“this.config.属性名”和“this.属性名”的形式都可以调用成员属性。
            Ext.Msg.alert(this.config.name+","+ this.age + " Says:", msg);
        },
        constructor: function (config) {
            this.initConfig(config);
        }
    });
    //注意:因为在类中将成员属性放进了config中,因此已不能用new的方式进行实例化了。
    //需要使用Ext的create方法创建并返回一个实例:
    var Tom = Ext.create("Person", {
        Name: 'Tom',
        Age: 26
    });
    Tom.Say("Hello");

    //使用Ext自动生成的set、get方法设置、访问实例属性
    //使用“Tom.config.Age”、“Tom.Age”都可以得到Age的值
    Tom.setAge(18);      //注:“Tom.Age=18”也可以——这是js赋值的方法
    alert(Tom.getAge()); //注:“Tom.Age”也可以——这是js取值的方法
})

在类的定义中添加了config项,将需要在配置中完成的属性添加在里面,而在构造函数中,我们通过调用this.initConfig方法完成对config的初始化;

在定义Person类对象的时候,使用Ext.create方法,传入类名Person以及配置项。

容器

Ext JS 中的容器是我们可以添加其他容器或子组件的组件。这些容器可以具有多个布局以将部件布置在容器中。 我们可以从容器和其子元素添加或删除组件。

Ext.container.Container 是 Ext JS 中所有容器的基类。

常用容器列表

TypeDesc
Ext.panel.Panel这是允许在正常面板中添加项目的基本容器
Ext.form.PanelForm面板为表单提供了一个标准容器,它本质上是一个标准的Ext.panel.Panel,它自动创建一个用于管理任何Ext.form.field.Field对象的BasicForm。
Ext.tab.Panel标签面板就像一个普通的面板,但支持卡标签面板布局
Ext.container.ViewportViewport是一个容器,它会自动调整大小到整个浏览器窗口的大小。 然后,您可以在其中添加其他ExtJS UI组件和容器

Ext.panel.Panel & Ext.form.Panel

<script type="text/javascript">
    Ext.onReady(function () {
        var child1 = Ext.create('Ext.Panel', {
            title:'Child Panel1',
            html: 'Text field1'
        });
        var child2 = Ext.create('Ext.Panel', {
            title:'Child Panel2',
            html: 'Text field2'
        });
        Ext.create("Ext.panel.Panel", {
            renderTo: Ext.getBody(),
            width: 100,
            height: 100,
            border: true,
            frame: true,
            items: [child1, child2]
        });
        Ext.create('Ext.form.Panel', {
            renderTo: Ext.getBody(),
            width: 100,
            height: 100,
            border: true,
            frame: true,
            layout: 'auto',// auto is one of the layout type.
            items: [child1, child2]
        });
    });
</script>

Ext.tab.Panel

<script type="text/javascript">
    Ext.onReady(function () {
        Ext.create('Ext.tab.Panel', {
            renderTo: Ext.getBody(),
            height: 100,
            width: 200,
            items: [{
               xtype: 'panel',
               title: 'Tab One',
               html: 'The first tab',
               listeners: {
                  render: function() {
                     Ext.MessageBox.alert('Tab one', 'Tab One was clicked.');
                  }
               }
            },{
               // xtype for all Component configurations in a Container
               title: 'Tab Two',
               html: 'The second tab',
               listeners: {
                  render: function() {
                     Ext.MessageBox.alert('Tab two', 'Tab Two was clicked.');
                  }
               }
            }]
         });
    });
</script>

Ext.container.Viewport

<script type="text/javascript">
    Ext.onReady(function () {
        var childPanel1 = Ext.create('Ext.panel.Panel', {
            title: 'Child Panel 1',
            html: 'A Panel'
        });
        var childPanel2 = Ext.create('Ext.panel.Panel', {
            title: 'Child Panel 2',
            html: 'Another Panel'
        });
        Ext.create('Ext.container.Viewport', {
        renderTo: Ext.getBody(),
            items: [ childPanel1, childPanel2 ]
        });
     });
</script>