使用Extjs组件实现Top-Left-Main布局并且增加事件响应

  每次在毕业答辩会上,看到同专业的同学只要是XXX管理系统,就是下图所示的界面,看来这中布局还是很受欢迎的(偷笑)。接下来进入我们正题,在web项目无论是前端还是后台管理比较常见的布局就是Top-Left-Main。如图所示:

  在平常的接触中,也见到了很多类似的前端框架,例如smartadmin,bootstrap-admin等,在今天我给大家介绍一种更加简洁的构建方式。

  项目源码地址:https://github.com/zhangxy1035/extjs

  参考资料:http://extjs-doc-cn.github.io/ext4api/#!/api

  项目展示:

  在该项目中界面界面的分类布局都是使用的extjs的panel完成的,主要代码如下:

1     //顶部
2     var topPanel = Ext.create(‘Ext.panel.Panel‘,{
3         region:‘north‘,///指定top方向
4         border:false,
5         height:80,
6         contentEl:‘top‘,//在网页中需要用id进行接收
7         margins:‘0 0 0 0‘
8     });

  本身来讲大家所看到的left面板其实就是extjs中所提到的树,接下来,我们将具体谈谈如何生成这棵树。

  官方代码如下: 

 1 var store = Ext.create(‘Ext.data.TreeStore‘, {
 2     root: {
 3         expanded: true,
 4         children: [
 5             { text: "detention", leaf: true },
 6             { text: "homework", expanded: true, children: [
 7                 { text: "book report", leaf: true },
 8                 { text: "alegrbra", leaf: true}
 9             ] },
10             { text: "buy lottery tickets", leaf: true }
11         ]
12     }
13 });
14
15 Ext.create(‘Ext.tree.Panel‘, {
16     title: ‘Simple Tree‘,
17     width: 200,
18     height: 150,
19     store: store,
20     rootVisible: false,
21     renderTo: Ext.getBody()
22 });

  其实在上述代码中,主要就是创建了一个树的数据源,然后加载到面板中,在传递到页面中显示。

  然而在本项目中,由于具体的需求,显示了一颗树上的两个叶子,并且为两个叶子的跳转增加了函数。具体代码如下:

  1 Ext.onReady(function(){
  2     //顶部
  3     var topPanel = Ext.create(‘Ext.panel.Panel‘,{
  4         region:‘north‘,///指定top方向
  5         border:false,
  6         height:80,
  7         contentEl:‘top‘,//在网页中需要用id进行接收
  8         margins:‘0 0 0 0‘
  9     });
 10
 11     //中间
 12     var centerPanel = Ext.create(‘Ext.tab.Panel‘,{
 13         region:‘center‘,
 14         contentEl:‘contentIframe‘,
 15         id:‘mainContent‘,
 16         items:[{title:‘首页‘}]
 17     });
 18
 19     //创建模型
 20     Ext.define(‘Menu‘, {
 21         extend: ‘Ext.data.Model‘,
 22         fields: [
 23             {name: ‘text‘,  type: ‘string‘},
 24             {name: ‘url‘,  type: ‘string‘}
 25         ]
 26     });
 27
 28     //创建数据(树的数据)
 29     var info1 = {
 30             text:‘信息1‘,
 31             leaf:true,
 32             url:‘../src/test1.html‘
 33     };
 34     var info2 = {
 35             text:‘信息2‘,
 36             leaf:true,
 37             url:‘../src/test2.html‘
 38     };
 39
 40     //创建数据源
 41     var menuStore = Ext.create(‘Ext.data.TreeStore‘,{
 42         model:‘Menu‘,
 43         proxy:{
 44             type:‘memory‘,
 45             data:[info1,info2]
 46         },
 47         root:{
 48             text:‘首页‘,
 49             leaf:false,
 50             expanded:true
 51         }
 52     });
 53
 54     //创建树菜单
 55     var menuTree = Ext.create(‘Ext.tree.Panel‘,{
 56         border:false,
 57         store:menuStore,
 58         hrefTarget:‘mainContent‘,
 59         useArrows:false,
 60         listeners:{
 61             itemclick:function(view,rec,item,index,e){
 62                 if(rec.get(‘leaf‘)) {
 63                     changePage(rec.get(‘url‘),rec.get(‘text‘));
 64                 }
 65             }
 66         }
 67     });
 68
 69     //切换内容
 70     function changePage(url,title) {
 71         var index = centerPanel.items.length;
 72         //tab不超过2个
 73         if(index==2) {
 74             //索引从0开始
 75             centerPanel.remove(1);
 76         }
 77         //动态添加tab
 78         var tabPage = centerPanel.add({
 79             title:title,
 80             closable:true
 81         });
 82         //设置显示当前的tab
 83         centerPanel.setActiveTab(tabPage);
 84         Ext.getDom(‘contentIframe‘).src=url;
 85     }
 86
 87     //
 88
 89     //左边
 90     var westPanel = Ext.create(‘Ext.panel.Panel‘,{
 91         region:‘west‘,
 92         layout:‘accordion‘,
 93         width:200,
 94         title:‘菜单选项‘,
 95         collapsible:true,
 96         margins:‘0 5px 0 0‘,
 97         items:[menuTree]
 98     });
 99
100     //通过viewport显示出来
101     Ext.create(‘Ext.container.Viewport‘,{
102         layout:‘border‘,
103         items:[topPanel,centerPanel,westPanel]
104     });
105
106
107 });

  接下来在页面中进行引用:

1 <div id="top">
2     <img src="../img/top.png" style="width: 1763px"/>
3 </div>
4 <iframe id="contentIframe" name="contentIframe" style="height:100%;width:100%" frameborder="0"></iframe>

  关于叶子节点的页面就可以自己编写,至此项目构建完成,其中还有一些较为详细的点没有提出,例如需要引入extjs等。大家可以再https://github.com/zhangxy1035/extjs上看源码。然后构建自己的项目。

时间: 2024-12-11 10:13:04

使用Extjs组件实现Top-Left-Main布局并且增加事件响应的相关文章

ExtJS中layout的12种布局风格

原文地址: http://www.cnblogs.com/mingforyou/p/4119200.html ExtJS中layout的12种布局风格 extjs的容器组件都可以设置它的显示风格,它的有效值有 absolute, accordion, anchor, border, card, column, fit, form and table.  一共9种. 另外几种见:  http://www.sencha.com/deploy/dev/examples/layout-browser/l

Android四大组件之Activity(活动)及其布局的创建与加载布局

Android四大组件之Activity(活动)及其布局的创建与加载布局 什么是Activity ? 活动(Activity)是包含用户界面的组件,主要用于和用户进行交互的,一个应用程序中可以包含零个或多个活动. 手动创建Activity的过程详解 到现在为止,你还没有手动创建过活动呢,在第一个安卓工程中,HelloWorldActivity是ADT帮我们创建的,手动创建活动可以加深我们的理解,因此现在是时候应该自己动手了. 首先,你需要再新建一个 Android 项目,项目名可以叫做 Acti

无废话ExtJs 入门教程十六[页面布局:Layout]

无废话ExtJs 入门教程十六[页面布局:Layout] extjs技术交流,欢迎加群(201926085) 首先解释什么是布局: 来自百度词典的官方解释:◎ 布局 bùjú: [distribution;layout] 对事物的全面规划和安排,布:陈设:设置. 我对布局理解是“把**东西放在**位置显示”[动词]. ok,我们这节课就讲一下怎么样把 ExtJs 的组件,放到我们想放置的位置. 一.常用布局 (1)ContainerLayout:默认布局方式,其他布局继承该类进行扩展功能.显示:

组件在容器中的布局

1,FlowLayout管理器 流式布局管理器,组件按照从左到右的流式顺序布局,JPanel组件中的默认布局管理器. 2,BorderLayout管理器 边框布局管理器,将容器分为东西南北中五个区域,每个区域只能添加一个组件,该组件的大小由其所在的区域决定.它是JFrame中的默认布局管理器. 3,GridLayout管理器 网格布局管理器,将容器分为行列的网格. 4,BoxLayout管理器 盒式布局管理器,组件安装垂直或者水平方式显示. 组件在容器中的布局,码迷,mamicode.com

EXTJS 组件开发(完整例子)

目标:EXTJS组件开发,从component基础实现一个TAB控件. 使用EXTJS版本为5.0.测试通过. 这个例子还很初级,仅仅是说明通过示例使用EXTJS进行组件开发的一个基本思路. <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>EXT JS TEST</title>

ExtJS 组件添加子组件

[1 添加子组件]  Ext.onReady(function(){ //ex002 : 在组件中添加子组件  ,并进行一系列针对于组件的操作 //在组件中添加子组件: /*var win = new Ext.window.Window({ title:"添加子组件实例" ,  width:'40%' , height:400 ,  renderTo:Ext.getBody() , draggable:false ,  //不允许拖拽 resizable:false ,  //不允许改

二列布局 左边固定宽度 右边响应

<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title>二列布局 左边固定宽度 右边响应</title> <style> html{ height: 100%; } body{ height: 100%; margin: 0; padding: 0; } .left{ width: 200px; heig

Container容器控件的使用、Hbox与Vbox布局管理器的使用、以及AjaxAction前后台事件响应、浏览器debug

1.由于有前后台交互功能,需要在Spring上下文中注册一个用于提供服务的bean,对于这个bean使用Spring提供的@Component标注,如果需要使用@Component注解,需要在项目中WebContent->WEB-INF->dorado-home目录下的app-context.xml文件中增加一个配置,配置如下:<context:component-scan base-package="com.bstek.dorado.sample"/> 2.C

extjs中form表单提交成功、失败的响应信息

类Ext.form.Action.Submit 处理表单Form数据和返回的response对象的类. 该类的实例仅在表单Form{@link Ext.form.BasicForm#submit 提交}的时候创建. 返回的数据包必须包含一个 boolean 类型的success属性,还有可选地,一个含有无效字段的错误信息的属性 A response packet may contain: ·        success property : Boolean - required. ·