1.1 获取Extjs

下载extjs

可以从http://extjs.org.cn/ 获得需要的extjs发布包及更多支持。

Extjs4学习 

1.2 搭建学习环境:

假设您的机器已经安装myeclipsetomcat,如果没有请参阅其他相关资料。

myeclipse建立新Web project项目Extjs4

Extjs4学习 

 

并且将extjs4.0.7压缩包解压后的全部文件复制到项目的Webroot目录下

Extjs4学习 

Examples目录为ext官方提供的例子程序,其中可能包涵php的代码,错误信息可以暂时不理会。

部署并且启动tomcat,测试环境是否可用。

打开浏览器,输入http://localhost:8080/Ext4/index.html

假设您的tomcat端口为8080

您会看到以下界面,证明环境已经搭建成功!

Extjs4学习 

 

查看api文档 http://localhost:8080/Ext4/docs/index.html

查看示例页面http://localhost:8080/Ext4/examples/index.html

 

1.3 测试例子

开始... 

Webroot目录下建立hellowword.js 输入如下内容:

Ext.application({

    name: 'HelloExt',

    launch: function() {

        Ext.create('Ext.container.Viewport'{

            layout: 'fit',

            items: [

                {

                    title: 'Hello Ext',

                    html : 'Hello! Welcome to Ext JS.'

                }

            ]

        });

    }

});

再建立一个helloword.html,输入如下内容

<html>

<head>

    <title>Hello Ext</title>

    <link rel="stylesheet" type="text/css" href="resources/css/ext-all.css">

    <script type="text/javascript" src="ext-all.js"></script>

    <script type="text/javascript" src="HelloExt.js"></script>

</head>

<body></body>

</html>

Html文件中只引入了一个css2js文件,注意引用路径和你建立文件路径是否能匹配,如果路径没有问题的话,打开浏览器输入

http://localhost:8080/Ext4/helloworld.html您将会看到浏览器里显示一个panel,标题是Hello Ext,内容Hello! Welcome to Ext JS.,如果没有,请查看是否有路径不匹配。

其他:

ExtJS里最常用的,应该就是Ext.onReadyExt.application这两个个方法了,而且它也可能是你学习ExtJS所接触的第一个方法,这个方法在当前的DOM加载完毕后自动调用,保证页面内的所有元素都能被Script所引用.可以尝试在这个方法中添加一条语句,看看页面打开后是什么反映 

(先建立jshtml文件,将如下代码加入js文件中,html文件相应引入对应的js文件, 本文档所有示例代码均如此方式运行以下不再重复)

Ext.onReady(function() { 

alert('hello world!'); 

});

上面的代码将在页面加载完毕后弹出一对话框,打印出'hello world!'字样.

获取元素 

还有一个常用的方法,就是获取页面上的元素了,ExtJS提供了一个get方法,可以根据ID取到页面上的元素

var myDiv = Ext.get('myDiv'); 

会取到页面上ID'myDiv'的元素.如果使用Element.dom的方法,则可以直接操作底层的DOM节点,Ext.get返回的则是一个Element对象

在不能使用这种方式来获取多个DOM的节点,或是要获取一些ID不一致,但又有相同特征的时候,可以通过选择器来进行获取,比如要获取页面上所有的 

标签,则可以使用

var ps = Ext.select('p'); 

这样你就可以对所要获取的元素进行操作了,select()方法返回的是Ext.CompositeElement对象,可以通过其中的each()方法对其所包含的节点进行遍历

 

ps.each(function(el) { 

el.highlight(); 

});

当然,如果你要是对获取的所有元素进行相同的操作,可以直接应用于CompositeElement对象上,

ps.highlight(); 

或是

Ext.select('p').highlight(); 

当然,select参数还可以更复杂一些,其中可以包括W3C Css3Dom选取器,基本的XPath,HTML属性等,详细情况,可以查看DomQuery API的文档,来了解细节

事件响应 

获取到了元素,则可能会对一些元素的事件进行一些处理,比如获取一个按钮,我们为它添加一个单击事件的响应

复制代码 代码如下:

Ext.onReady(function() { 

Ext.get('myButton').on('click', function() { 

alert('You clicked the button!'); 

}); 

}); 

 

 

当然,你可以把事件的响应加到通过select()方法获取到的元素上

复制代码 代码如下:

Ext.select('p').on('click', function() { 

alert('You clicked a paragraph!'); 

}); 

 

 

Widgets 

ExtJS还提供了丰富的UI库来供大家使用

 

Extjs4布局详解

2.1 Fit布局

Extjs4学习 

Fit布局中,子元素将自动填满整个父容器。注意:在fit布局下,对其子元素设置宽度是无效的。如果在fit布局中放置了多个组件,则只会显示第一个子元素

Fit布局中,子元素将自动填满整个父容器。注意:在fit布局下,对其子元素设置宽度是无效的。如果在fit布局中放置了多个组件,则只会显示第一个子元素。典型的案例就是当客户要求一个windowpanel中放置一个GRID组件,grid组件的大小会随着父容器的大小改变而改变。

示例代码:

Ext.application({

    name: 'HelloExt',

    launch: function() {

        Ext.create('Ext.container.Viewport'{

            layout: 'fit',

            items: [

                {

                    title: 'Hello Ext',

                    html : 'Hello! Welcome to Ext JS.'

                }

            ]

        });

    }

});

 

2.2 Border布局

border布局:border布局也称边界布局,他将页面分隔为west,east,south,north,center这五个部分,我们需要在在其items中指定使用region参数为其子元素指定具体位置。

Extjs4学习 

border布局:border布局也称边界布局,他将页面分隔为west,east,south,north,center这五个部分,我们需要在在其items中指定使用region参数为其子元素指定具体位置。

注意:northsouth部分只能设置高度(height),westeast部分只能设置宽度(width)。north south west east区域变大,center区域就变小了。

参数 split:true 可以调整除了center四个区域的大小。

参数 collapsible:true 将激活折叠功能, title必须设置,因为折叠按钮是出现标题部分的。

center 区域是必须使用的,而且center 区域不允许折叠。Center区域会自动填充其他区域的剩余空间。尤其在Extjs4.0中,当指定布局为border时,没有指定center区域时,会出现报错信息。

示例代码:

 

Ext.application({

name:"HelloExt"

launch:function () {

Ext.create('Ext.panel.Panel'

        width: 1024, 

        height: 720, 

        layout: 'border'

        items: [

            region: 'south'

            xtype: 'panel'

            height: 20, 

            split: false,

            html: '欢迎登录!'

            margins: '0 5 5 5' 

        },

            title: 'West Region is collapsible'

            region:'west'

            xtype: 'panel'

            margins: '5 0 0 5'

            width: 200, 

            collapsible: true

            id: 'west-region-container'

            layout: 'fit' 

        },

            title: 'Center Region'

            region: 'center'

            xtype: 'panel'

            layout: 'fit'

            margins: '5 5 0 0'

            html:'Extjs4中,center区域必须指定,否则会报错。

        }], 

        renderTo: Ext.getBody() 

    });

}

});

 

 

 

2.3 Accordion布局

accordion布局:accordion布局也称手风琴布局,在accordion布局下,在任何时间里,只有一个面板处于激活状态。其中每个面边都支持展开和折叠。

 

Extjs4学习 

accordion布局:accordion布局也称手风琴布局,在accordion布局下,在任何时间里,只有一个面板处于激活状态。其中每个面边都支持展开和折叠。注意:只有Ext.Panels 和所有Ext.panel.Panel 子项,才可以使用accordion布局。

示例代码:

 

Ext.application({

name:"HelloExt"

launch:function () {

Ext.create('Ext.panel.Panel'

        title: 'Accordion Layout',     

        width: 300,      

        height: 300, 

        x:20, 

        y:20, 

        layout:'accordion',     

        defaults: 

            bodyStyle: 'padding:15px' 

        }

        layoutConfig: {        

            titleCollapse: false,         

            animate: true,         

            activeOnTop: true      

        },     

        items: [{         

            title: 'Panel 1',         

            html: 'Panel content!'      

        },{         

            title: 'Panel 2',         

            html: 'Panel content!'     

        },

            title: 'Panel 3',         

            html: 'Panel content!'     

        }],      

        renderTo: Ext.getBody() 

    });

}});

 

 

2.4 Card布局

Card布局:这种布局用来管理多个子组件,并且在任何时刻只能显示一个子组件。这种布局最常用的情况是向导模式,也就是我们所说的分布提交。

 

Extjs4学习 

Card布局:这种布局用来管理多个子组件,并且在任何时刻只能显示一个子组件。这种布局最常用的情况是向导模式,也就是我们所说的分布提交。Card布局可以使用layout:'card'来创建。注意:由于此布局本身不提供分步导航功能,所以需要用户自己开发该功能。由于只有一个面板处于显示状态,那么在初始时,我们可以使用setActiveItem功能来指定某一个面板的显示。当要显示下一个面板或者上一个面板的时候,我们可以使用getNext()getPrev()来得到下一个或上一个面板。然后使用setDisabled方法来设置面板的显示。另外,如果面板中显示的是FORM布局,我们在点击下一个面板的时候,处理FORM中提交的元素,通过AJAX将表单中的内容保存到数据库中或者SESSION中。

下面的示例代码展示了一个基本的Card布局,布局中并没有包含form元素,具体情况,还要根据实际情况进行处理:

Ext.application({

    name: 'HelloExt',

    launch: function() {

        var navigate = function(panel, direction){      

        var layout = panel.getLayout();     

        layout[direction]();      

        Ext.getCmp('move-prev').setDisabled(!layout.getPrev());      

        Ext.getCmp('move-next').setDisabled(!layout.getNext()); 

    };  

    Ext.create('Ext.panel.Panel'{     

        title: 'Card布局示例',     

        width: 300,      

        height: 202,     

        layout: 'card',      

        activeItem: 0, 

        x:30, 

        y:60, 

        bodyStyle: 'padding:15px',     

        defaults: {border: false}

        bbar: [{             

            id: 'move-prev',             

            text: 'Back',              

            handler: function(btn) 

                navigate(btn.up("panel"), "prev");             

            }

            disabled: true 

        }

        '->'

        

            id: 'move-next',             

            text: 'Next',              

            handler: function(btn) 

                navigate(btn.up("panel"), "next"); 

            

        }], 

        items: [

            id: 'card-0'

            html: '<h1>Welcome to the Wizard!</h1><p>Step 1 of 3</p>'      

        }

        

            id: 'card-1'

            html: '<p>Step 2 of 3</p>' 

        }

        

            id: 'card-2'

            html: '<h1>Congratulations!</h1><p>Step 3 of 3 - Complete</p>'      

        }],     

        renderTo: Ext.getBody() 

    });

    }

});

 

2.5 Anchor布局

anchor布局将使组件固定于父容器的某一个位置,使用anchor布局的子组件尺寸相对于容器的尺寸,即父容器容器的大小发生变化时,使用anchor布局的组件会根据规定的规则重新渲染位置和大小。

 

Extjs4学习 

anchor布局将使组件固定于父容器的某一个位置,使用anchor布局的子组件尺寸相对于容器的尺寸,即父容器容器的大小发生变化时,使用anchor布局的组件会根据规定的规则重新渲染位置和大小。

AnchorLayout布局没有任何的直接配置选项(继承的除外),然而在使用AnchorLayout布局时,其子组件都有一个anchor属性,用来配置此子组件在父容器中所处的位置。

anchor属性为一组字符串,可以使用百分比或者是-数字来表示。配置字符串使用空格隔开,例如

anchor:'75% 25%',表示宽度为父容器的75%,高度为父容器的25%

anchor:'-300 -200',表示组件相对于父容器右边距为300,相对于父容器的底部位200

anchor:'-250 20%',混合模式,表示组件党对于如容器右边为250,高度为父容器的20%

示例代码:

Ext.application({

    name: 'HelloExt',

    launch: function() {

        Ext.create('Ext.Panel'{     

        width: 500,     

        height: 400,      

        title: "Anchor布局",     

        layout: 'anchor'

        x:60, 

        y:80, 

        renderTo: Ext.getBody(),     

        items: [{         

            xtype: 'panel',          

            title: '75% Width and 25% Height',         

            anchor: '75% 25%'     

        },{          

            xtype: 'panel',         

            title: 'Offset -300 Width & -200 Height',          

            anchor: '-300 -200'          

        },{         

            xtype: 'panel',          

            title: 'Mixed Offset and Percent',         

            anchor: '-250 30%'     

        }

    });

    }

});

 

2.6 Absolute布局

Absolute布局继承Ext.layout.container.Anchor 布局方式,并增加了X/Y配置选项对子组件进行定位,Absolute布局的目的是为了扩展布局的属性,使得布局更容易使用

 

Extjs4学习 

Absolute布局继承Ext.layout.container.Anchor 布局方式,并增加了X/Y配置选项对子组件进行定位,Absolute布局的目的是为了扩展布局的属性,使得布局更容易使用。

Ext.application({

name:"HelloExt"

launch:function () {

Ext.create('Ext.form.Panel'{     

        title: 'Absolute布局',     

        width: 300,      

        height: 275, 

        x:20, 

        y:90, 

        layout:'absolute',     

        defaultType: 'textfield',     

        items: [

            x: 10,         

            y: 10,          

            xtype:'label',         

            text: 'Send To:'     

        },

            x: 80,          

            y: 10,         

            name: 'to',          

            anchor:'90%'     

        },{         

            x: 10,          

            y: 40,         

            xtype:'label',         

            text: 'Subject:'     

        },{          

            x: 80,         

            y: 40,         

            name: 'subject',          

            anchor: '90%' 

        },{         

            x:0,          

            y: 80,         

            xtype: 'textareafield',         

            name: 'msg',          

            anchor: '100% 100%' 

        }],      

        renderTo: Ext.getBody() 

    });

}

});

 

 

 

2.7 Column布局

Column布局一般被称为列布局,这种布局的目的是为了创建一个多列的格式。其中每列的宽度,可以为其指定一个百分比或者是一个固定的宽度。

 

Extjs4学习 

Column布局一般被称为列布局,这种布局的目的是为了创建一个多列的格式。其中每列的宽度,可以为其指定一个百分比或者是一个固定的宽度。

Column布局没有直接的配置选项(继承的除外),但Column布局支持一个columnWidth属性,在布局过程中,使用columnWidth指定每个面板的宽度。

注意:使用Column布局布局时,其子面板的所有columnWidth值加起来必须介于0~1之间或者是所占百分比。他们的总和应该是1

另外,如果任何子面板没有指定columnWidth值,那么它将占满剩余的空间。
 

示例代码:

相关文章: