构建施耐德楼控系统数据库后台服务器示例工程三(Web端展示)

最近看到Extjs的示例中有仿操作系统桌面的代码,并且展示效果很美观,结合楼控这个系统的Web端展示需求,目前前端采用Extjs。楼控相关的操作会设计成桌面中的不同应用。

Extjs初次入手看起来很复杂,但是由于其自带的示例代码很丰富,通常在了解一些基本概念后,参照着示例代码一步一步去做,我认为是最好的学习方式了。

目前我参照着Extjs中仿照桌面的示例代码,做出了如下的画面:

从图中我们可以看出,我目前在仿照着这个示例代码中的GridPanel、TabPanel、Window这些基本的组件,做出了一个简易的仿数据库连接的一个工具。目前这个工具只实现了:

1.从这个Web服务器默认的数据库中读取表结构功能

2.点击表名分页查询相应表中的数据的功能

其中涉及到的js部分的功能是:

1.同步读取数据

2.异步读取数据

3.TreePanel、TabPanel、GridPanel的应用

下面在此记录一下在做这个页面过程中需要了解的基础知识。

1. ExtJS 4中动态加载路径

动态加载这个概念是在这种情况下提出的,即我们知道Extjs文件数量多且很多还很大,通常一次性加载完所有的JS文件, 对于比较大型的项目来说,把所有js文件放在同一个目录下面,通常不便于管理。所有引入了动态加载这个概念,即浏览器可以智能的找到所用到的js代码应该加载的js文件路径。

Extjs动态加载通常采用Ext.Loader来完成。

<script type="text/javascript">
Ext.onReady(function() {
    Ext.Loader.setConfig({
        enabled    : true,
        disableCaching: false,
        paths    : {
            ‘Ext.ux.desktop‘: ‘/TacControlServerWeb/szxdesktop/js/‘,
        }
    });
});
</script>

上面的代码启用了动态加载, 禁用了浏览器缓存, 以及指定了 ExtJS 的所部署的路径。

在ExtJS中有类为Ext.ux.desktop.Desktop,我们指定了Ext.ux的路径为’/TacControlServerWeb/szxdesktop/js/’下,找到Desktop.js 这个文件。

我们还可以这么使用Ext.Loader:


Ext.Loader.setPath({
    ‘Ext.ux‘: ‘/TacControlServerWeb/szx/ext-4.1.1a/examples/ux/‘,
    ‘Ext.ux.desktop‘: ‘/TacControlServerWeb/szxdesktop/js/‘,
    ‘szxdesktop.app.database‘:‘/TacControlServerWeb/szxdesktop/app/database/‘,
     Database:‘/TacControlServerWeb/szxdesktop/app/database/‘,
     MyDesktop: ‘/TacControlServerWeb/szxdesktop/‘

});

2. ExtJS中类

ExtJS引入了类的概念,我们可以以面向对象的思想去编写JS代码了

1)ExtJS中,创建一个类时,其内部处理过程包括一些前置处理为创建类做准备,也包括一些类创建后的后置处理,如下图所示

前置处理包括:

className定义这个类的名称空间和名字;

loader 查找类的依赖,如果这些依赖不存在则尝试加载它们;

extend 在新类中添加从父类中继承的所有方法和属性;

statics 为当前类定义添加统计分析相关的方法和属性;

inheritableStatics 此阶段添加来自父类的统计方法及属性(如果存在);

config 为配置项创建get和set方法;

mixins 继承所有mixin类的方法和属性;

xtype 为新类定义xtype;

alias 为新类定义别名;

后置处理包括:

alias 将新类的别名注册到类管理器;

singleton 为新类创建一个单例实例;

alternateClassName 为创建的新类定义其它的名称;

uses 导入新类所使用的所有其它类;

2)下面是数据库工具的定义类

Ext.define(‘szxdesktop.app.database.DatabaseWindow‘, {
    extend: ‘Ext.ux.desktop.Module‘,
    alias:"widget.szxdesktop.app.database.DatabaseWindow",
    requires: [
        ‘Ext.*‘,
        ‘szxdesktop.app.database.TableTree‘,
        ‘szxdesktop.app.database.TableGrid‘
    ],

    id:‘database-win‘,

    init : function(){
        this.launcher = {
            text: ‘数据库‘,
            iconCls:‘icon-grid‘
        };
    },

    createWindow : function(){
        var desktop = this.app.getDesktop();
        var win = desktop.getWindow(‘grid-win‘);
        if(!win){
            win = desktop.createWindow({
                id: ‘database-win‘,
                title:‘数据库‘,
                width:740,
                height:480,
                iconCls: ‘icon-grid‘,
                animCollapse:false,
                constrainHeader:true,
                layout: ‘border‘,
                items: [
                    {

                       region:‘west‘,
                       xtype:"szxdesktop.app.database.TableTree",
                       width: 170,
                       padding: 0,
                       listeners: {
                            "cellclick":function(tree,  td,  cellIndex,record,  tr,  rowIndex,  e,  eOpts){
                                var tabs=Ext.ComponentQuery.query("[tableTabPanelId=szxdesktop.app.database.DatabaseWindowTabPanel]")[0];
                                if(tabs.items.containsKey(record.data.id)){
                                    tabs.setActiveTab(Ext.getCmp(record.data.id));
                                }else{
                                    var col = [];
                                    Ext.Ajax.request({
                                        url: "szxrest/DatabaseRest/getDatabaseTableColumnName",
                                        method: "GET",
                                        async: false,   //ASYNC 是否异步( TRUE 异步 , FALSE 同步)
                                        params: {
                                            tableName:record.data.text
                                        },
                                        success: function(response, opts) {
                                            col = Ext.JSON.decode(response.responseText);
                                        },
                                        failure: function() {
                                        }
                                    });
                                    var jsonStoreFieldCol = [];
                                    Ext.Ajax.request({
                                        url: "szxrest/DatabaseRest/getDatabaseTableColumnName2JsonStoreField",
                                        method: "GET",
                                        async: false,   //ASYNC 是否异步( TRUE 异步 , FALSE 同步)
                                        params: {
                                            tableName:record.data.text
                                        },
                                        success: function(response, opts) {
                                            jsonStoreFieldCol = Ext.JSON.decode(response.responseText);
                                            console.log(jsonStoreFieldCol[0].name);
                                        },
                                        failure: function() {
                                        }
                                    });
                                    var colName = jsonStoreFieldCol[0]==null?‘‘:jsonStoreFieldCol[0].name;
                                    var tab =  tabs.add({
                                        closable: true,
                                        layout:{type:"fit"},
                                        id:record.data.id,
                                        items:[Ext.create(‘szxdesktop.app.database.TableGrid‘,{
                                                            border:0,
                                                            gridId:record.data.id+‘tableValue‘,
                                                            columns:col,
                                                            url:‘szxrest/DatabaseRest/getDatabaseTableColumnValue‘,
                                                            tableName:record.data.text,
                                                            columnName:colName,
                                                            JsonStorefields:jsonStoreFieldCol
                                                         })//creategrid
                                        ],
                                        title: record.data.text+" 表",
                                        iconCls:‘grid-shortcut32‘
                                    }).show();
                                    tabs.setActiveTab(tab);
                                }

                            }

                        }
                   },
                   {
                       tableTabPanelId:"szxdesktop.app.database.DatabaseWindowTabPanel",
                       region:‘center‘,
                       xtype:"tabpanel",
                       bodyStyle: ‘padding: 0px;‘,
                       layout: ‘fit‘,
                       items: [],
                       padding: 0
                   }//tabpanel
            ]//items
            });
        }
        return win;
    }
});

extend表示继承父类所有属性

alias则是定义这个类的别名,即简称

requires则类似java中的import,即加载该类中使用到的其他的类定义

3. Ajax情求

我使用的Ext下面的方法进行的Ajax操作

var jsonStoreFieldCol = [];
Ext.Ajax.request({
                url: "szxrest/DatabaseRest/getDatabaseTableColumnName2JsonStoreField",
                method: "GET",
                async: false,   //ASYNC 是否异步( TRUE 异步 , FALSE 同步)
                params: {
                                      tableName:record.data.text
                 },
                success: function(response, opts) {
                jsonStoreFieldCol = Ext.JSON.decode(response.responseText);
                                            console.log(jsonStoreFieldCol[0].name);
                                        },
                failure: function() {
                }
});

在该方法中async为true表示异步请求,为false表示同步阻塞请求(即请求完成后,才进行后面语句的执行)

上面的三点即是常用到的三点,至于tabpanel、gridpanel等的使用,可以在要用到的时候,参考示例或者api即可。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-19 04:08:53

构建施耐德楼控系统数据库后台服务器示例工程三(Web端展示)的相关文章

构建施耐德楼控系统数据库后台服务器示例工程二(数据库查询编写)

构建施耐德楼控系统数据库后台服务器示例工程-(工程创建)记录了一个Spring.Hibernate.Rest的工程如何创建,这篇将简单介绍在这个框架下如何利用注释编程. 1.Spring注释 Spring为我们提供了@Service.@Autowired这些标注来让工程中的Bean自动创建. 在我们的框架中,我们需要为每一个需要被其他类调用到的类名前添加@Service标签,在需要被自动创建的成员类上添加@Autowired,这样程序在运行时Spring会为我们自动装配相关的类实例. 2.Res

构建施耐德楼控系统数据库后台服务器示例工程—(工程创建)

工作中需要在施耐德楼控系统上添加后台管理功能和手机控制功能,单位采购的施耐德的产品仅仅是用于控制现场设备的楼控模块及上位机编程与HMI,我们需要在此基础上,自主开发手机端控制功能,那么就需要通过建立后台工程用于往施耐德的硬件上发信号或者修改其数据库. 本文即是建立在此想法的基础上,记录一下如何采用Spring.Hibernate.Rest这个框架构建一个可以快速开发的后台管理框架. 1.使用eclipse新建一个普通JAVA工程 2.右键工程名,选择属性,点击"Project Facets&qu

构建施耐德楼控系统数据库后台服务器示例工程五(JAVA动态生成类)

在做数据库简易工具的过程中遇到了这么一个问题,即程序部署在tomcat下启动运行后,我们无法事先定义数据库中后续创建的表结构的Hibernate Bean对象,这样就需要我们在服务器运行起来后动态创建bean对象.cglib这个开源库即可解决我们的问题,动态创建JAVA对象. 1.cglib开源库简介 CGLIB(Code Generation Library)是一个开源项目,是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口. 反编译后CGLIB结构

构建施耐德楼控系统数据库后台服务器示例工程四(SQLServer查询语句)

由于目前做的是一个数据库操作的一个简易类,涉及到如下查询语句,在此记录一下. 1.查询表名 select object_id,name name from sys.tables 2.查询列信息 SELECT (case when a.colorder = 1 then d.name else null end) 表名, a.colorder 字段序号, a.name 字段名, (case when COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 th

火力发电厂工控系统网络安全解决方案 - 对比分析

发电厂网络概述 火电厂网络架构中涉及的系统主要包括:火电机组分散控制系统DCS.火电机组辅机控制系统DCS\PLC.火电厂级信息监控系统.调速系统和自动发电控制功能AGC.励磁系统和自动电压控制功能AVC.梯级调度监控系统.网控系统.继电保护.故障录波.电能量采集装置.电力市场报价终端等系统. 电力行业在安全方面是考虑地比较早的,形成了"安全分区.网络专用.横向隔离.纵向认证"的总体原则. 区域一般分为:生产控制大区(控制区+非控制区),管理信息大区. 也有情况下,电厂会将区域分为4个

业务系统数据库设计常见的隔离和共享模式

多年开发和维护某些业务系统的经验,让人真正理解了什么叫“数据库设计良好,系统就成功了一半”,尤其是那些面向多商户的基础服务平台.公共服务平台.开放服务平台.或者由它们组合而成的综合服务平台.数据库设计之初,必须对业务系统DB的隔离和共享模式的优缺有充分的调研,平衡好业务系统的边界,合理设计使用必要的冗余,以适应系统后续的不断变化,否则后期开发人员将陷入无尽的烦恼和痛苦之中,这绝不是危言耸听,只有开发和维护过平台类产品的人才能深刻体会.下面就介绍三种业务系统中最常见的数据库设计的隔离和共享模式:

linux--监控系统之Zabbix简介

一.zabbix概述 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题. zabbix由2部分构成,zabbix server与可选组件zabbix agent. zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,

Flume+Kafka+Storm+Redis构建大数据实时处理系统:实时统计网站PV、UV+展示

[TOC] 1 大数据处理的常用方法 前面在我的另一篇文章中<大数据采集.清洗.处理:使用MapReduce进行离线数据分析完整案例>中已经有提及到,这里依然给出下面的图示: 前面给出的那篇文章是基于MapReduce的离线数据分析案例,其通过对网站产生的用户访问日志进行处理并分析出该网站在某天的PV.UV等数据,对应上面的图示,其走的就是离线处理的数据处理方式,而这里即将要介绍的是另外一条路线的数据处理方式,即基于Storm的在线处理,在下面给出的完整案例中,我们将会完成下面的几项工作: 1

自主开发微信云控系统源码与群控系统源码区别,及技术原理

在微信云控系统中,主要由服务器端,手机客户端,模拟点击 滑动等部分组成.其系统关键的核心在于服务器端的命令推送到手机上,以及手机接收到命令后执行相应程序的模拟人工操作.在开发过程中,我们主要用到的开发语言有:PHP.Android.Java.C.C++.服务器的推送方式有很多种,在我们实现云控系统中选用的是个推来实现命令的推送.后台设备管理,以及命令参数的下发等等,都是大家都会经常遇到的各种管理系统的开发类似的.部分核心代码为: //服务端推送接口,支持三个接口推送 //1.PushMessag