Extjs4.0学习笔记

Extjs4.0学习笔记
Extjs4.0学习笔记

Extjs4 学习笔记(一)——准备工作

本文内容已经重新更新,旧版请查看https://www.360docs.net/doc/d317500452.html,/a/20116/20116281100279-old.html。

重写原因:由于开始准备的时候,就是按照传统开发去做的,写了一部分之后,有网友和同事提出:“为什么不用MVC模式”呢?这样的问题让我对目前传统开发的心发生了一些细微变法,对啊,为什么不用MVC模式呢?我征求了一下同事及热心网友的意见,都同意使用MVC模式开发。从而,我删掉了原来所有目录,重新按照MVC模式去组织目录结构,很快的,目录结构准备好了。

那。。我们重新来过,使用EXTJS4.0的MVC模式,开发这套员工管理系统。给个简称吧。SMS(你懂得。呵呵!)。

一、建立环境:

Data:数据库文件夹,里面放着管理系统用的数据库文件。数据库目前只有三张表。分别是:

Menu:菜单项

user:员工注册信息

userinfo:员工个人资料信息

Images:图片目录,一些自定义的图片文件

Include:服务端文件目录,里面包含ASP所用到的Conn.asp、Function.asp等文件

App:整个SMS所用到的自定义JS文件,里面有一个controller文件夹,一个view文件夹。controller文件夹放置主代码,view文件夹放置各组件。这几个文件夹中的内容会在第二章进行介绍。

Extjs4:此目录放置Extjs4的库文件。

Server:服务端目录,里面包含ASP服务端获取数据的各种.ASP文件。目前里面建立了一个叫MenuLoader.asp的文件,从名字上来看,这个文件是加载菜单使用。

OK,今天就介绍到这里,明天,我们会从头开始发开基于Extjs4 MVC模式的应用。

Extjs4开发笔记(二)——框架的搭建

头部、菜单、内容区及底部则完全分离成4个JS文件,我们将先实现这几个文件的基础功能,由于使用的是Extjs4,所以我们一定要使用Extjs4 动态加载功能。来动态加载这些文件。

本文内容已经重新更新,旧版请查看:https://www.360docs.net/doc/d317500452.html,/a/20116/201162913210280-old.html 由于最近老出差,所以代码无法及时更新。导致近一周都没有更新。

废话不多说了,上篇文章建立了比较基础的文件。今天开始搭建大体的框架,由于Extjs4在组件建立方面有了很大的改变,所以第一次建立的框架页面还是费了比较长的时间。本章内容增加了一些图片及CSS文件,目的是为了美化整个界面。增加的CSS文件:注意事项:layout、region的使用,如果没有看API及相关文档的话,那么面对错误对话框的时候,还不知道是怎么回事。

本文将main.js放到了/app/controller文件夹下,这将是整个项目的主体文件。

而头部、菜单、内容区及底部则完全分离成4个JS文件,我们将先实现这几个文件的基础功能,之后我们会慢慢完善这些组件。而整个页面的填充,也使用一个JS文件来完成。也许有人会问,这么多文件,是不是要都在index.html中引入啊。这样想的话,就错了哦。因为我们使用的是Extjs4,所以我们一定要使用Extjs4 动态加载功能。

先来看下自定义CSS(sytle.css):

1.#header { background: #7F99BE url(/images/layout-browser-hd-bg.gif) repeat-x center;}

2.#header h1 {font-size: 16px;color: #fff;padding: 3px 10px; font-family:"微软雅黑","黑体"}

3.

4..tabs{}

5..tabs{background-image: url(../images/menuPanel/bulletin_manager.gif) !important;}

6..manage{background-image: url(../images/menuPanel/admin.gif) !important;}

7..home{background-image: url(../images/home.gif) !important; line-height:30px;}

8..icon-menu{background-image: url(../images/menuPanel/sys.gif) !important;}

图片文件夹就不放上来了。从以前的项目中拷贝了一些比较靠谱的图片,大家完全可以自己去下载一些ICON图标文件而为己所用。

搭建的框架是经典的EXTJS布局模式,如图所示:

首先,我们建立index.html和app.js,index.html代码为:

1.

"https://www.360docs.net/doc/d317500452.html,/TR/xhtml1/DTD/xhtml1-transitional.dtd">

2.

3.

4.

5.员工管理系统

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

App.js:

1.Ext.Loader.setConfig({enabled: true});

2.Ext.application({

https://www.360docs.net/doc/d317500452.html,: 'SMS',

4.appFolder: 'app',

5.controllers: [

6.'Main'

7.]

8.});

稍做解释:

Ext.Loader.setConfig({enabled: true});//意思是开启Ext.Loader。Ext.Loader是动态加载的核心哦。。

Ext.appliction({...});看字面意思吧,不解释。

配置中的name,我理解为是Extjs3.x、Extjs2.x中的命名空间。

appFolder,应用文件夹名字。

controllers,控制单元的名字,这里我们定义为Main。那么根据Extjs4动态加载的要求,我们需要在/app/controllers文件夹下建立Main.js文件,作为控制单元。有关Extjs4动态加载机制,请参考:https://www.360docs.net/doc/d317500452.html,/a/20117/2011721040290.html

Main.js:

1.Ext.define('SMS.controller.Main',{

2.extend: 'Ext.app.Controller',

3.init : function(){

4.}

5.})

这里的Main.js中只是定义了Main这个类,且继承了Ext.app.Controller,其余都没有写。看到这里,会有人很奇怪了,index.html中引入了app.js,而app.js只是创建了Main这个类,但Main.js什么都没有,那么页面中为什么会显示出框架页面呢?这也是最多人所疑惑的。下面我来解释下这个问题。所有的原因就在于app.js这个文件中,app.js文件定义了Ext.application。而Ext.application中有个属性是autoCreateViewport ,这个属性是Boolean 类型,如果值为true,那么Extjs4会自动加载view/Viewport.js文件,如果值为flase,那么必须要自己去创建一个View,这就是为什么app.js和Main.js文件都没有写相关代码,也会有界面出现。

整理下思路,由于Extjs4自动加载了view/Viewport.js,而Viewport.js文件包含了头部、菜单、内容区及底部这4个组件,那么我们必须先完成这4个文件的编写,同样,由于这4个文件是界面型的,我们将这4个文件都放到view文件夹下。

view文件夹下共5个JS文件,分别为:

Header.js、Menu.js、South.js、TabPanel.js及Viewport.js

这5个js文件的作用,我们一一介绍。

5个js文件都包含了Ext.applyIf、callParent。由于篇幅问题,Ext.applyIf、callParent等方法,请参考Extjs4相关API。

Header.js:这个是头部,也就是深蓝色底子。白色字体,那块,上面写着员工管理系统。

代码为:

1.Ext.define('SMS.view.Header', {

2.extend: 'https://www.360docs.net/doc/d317500452.html,ponent',

3.initComponent: function() {

4.Ext.applyIf(this, {

5.xtype: 'box',

6.cls: 'header',

7.region: 'north',

8.html: '

员工管理系统

',

9.height: 30

10.});

11.this.callParent(arguments);

12.}

13.});

Menu.js:

1.Ext.define('SMS.view.Menu',{

2.extend: 'Ext.tree.Panel',

3.initComponent : function(){

4.Ext.apply(this,{

5.id: 'menu-panel',

6.title: '系统菜单',

7.iconCls:'icon-menu',

8.margins : '0 0 -1 1',

9.region:'west',

10.border : false,

11.enableDD : false,

12.split: true,

13.width : 212,

14.minSize : 130,

15.maxSize : 300,

16.rootVisible: false,

17.containerScroll : true,

18.collapsible : true,

19.autoScroll: false

20.});

21.this.callParent(arguments);

22.}

23.})

TreePanel并没有加载菜单项,关于Extjs4 Tree,我们后面会介绍。TabPanel.js:

1.Ext.define('SMS.view.TabPanel',{

2.extend: 'Ext.tab.Panel',

3.initComponent : function(){

4.Ext.apply(this,{

5.id: 'content-panel',

6.region: 'center',

7.defaults: {

8.autoScroll:true,

9.bodyPadding: 10

10.},

11.activeTab: 0,

13.//plain: true,

14.items: [{

15.id: 'HomePage',

16.title: '首页',

17.iconCls:'home',

https://www.360docs.net/doc/d317500452.html,yout: 'fit'

19.}]

20.});

21.this.callParent(arguments);

22.}

23.})

South.js:

1.Ext.define('SMS.view.South',{

2.extend: 'Ext.Toolbar',

3.initComponent : function(){

4.Ext.apply(this,{

5.id:"bottom",

6.//frame:true,

7.region:"south",

8.height:23,

9.items:["当前用户:Guest",'->',"技术支持:

style='text-decoration:none;'>https://www.360docs.net/doc/d317500452.html,  "]

10.});

11.this.callParent(arguments);

12.}

13.})

文件都创建好了。我们进行最后一部,布局。

Viewport.js:

1.Ext.define('SMS.view.Viewport',{

2.extend: 'Ext.Viewport',

https://www.360docs.net/doc/d317500452.html,yout: 'fit',

4.hideBorders: true,

5.requires : [

6.'SMS.view.Header',

7.'SMS.view.Menu',

8.'SMS.view.TabPanel',

9.'SMS.view.South'

10.],

11.initComponent : function(){

12.var me = this;

13.Ext.apply(me, {

14.items: [{

15.id:'desk',

17.items: [

18.Ext.create('SMS.view.Header'),

19.Ext.create('SMS.view.Menu'),

20.Ext.create('SMS.view.TabPanel'),

21.Ext.create('SMS.view.South')

22.]

23.}]

24.});

25.me.callParent(arguments);

26.}

27.})

重点:requires属性,这个我理解为创建引用。稍懂编程语言的人应该都明白。但是光引用还不够,我们还需要去实例化它,也就是Ext.create。至此,我们的框架已经顺利搭建完毕。

今天的工作也就是这么多,搭建完框架之后,会慢慢丰富整个系统。本来想连菜单的树也完成,最后想了想,这工作还是留到明天吧。因为树涉及到了异步获取,需要有服务端程序,今天弄好框架之后,把服务端代码写好了,明天来完成这棵树的实现吧。

需要注意的一点,在extjs4中,只要定义了布局为border,那么他的items中必须要有region: 'center'的组件,否则将会提示错误。貌似在extjs3.x甚至是以前的版本都没发现有这样的要求,因为这个,费了老大的劲才调整过来,再一看,代码全部变了,已经跟extjs3.x 的风格完全不同了。令人欣喜的是,现在的代码完全符合extjs4的风格,也完全符合我的预期。

好了,本章内容就结束了。下篇文章,将实现菜单的功能。敬请期待。

Extjs4开发笔记(三)——菜单的实现

本文实现以及点击菜单后在右边内容区打开一个新的Panel。本篇文章的内容主要包括两个方面,Extjs4 Tree及Extjs4 TablePanel。

本文内容已经更新,旧文档请看这里:https://www.360docs.net/doc/d317500452.html,/a/20116/20116301260285-old.html 上篇文章介绍了搭建一个空的框架(链接地址:

https://www.360docs.net/doc/d317500452.html,/a/20116/201162913210280.html),使得管理系统有了大致的模样,今天工作的主要内容就是菜单的实现以及点击菜单后在右边内容区打开一个新的Panel。本篇文章的内容主要包括两个方面,Extjs4 Tree及Extjs4 tabPanel。

在Extjs应用中实现菜单,无疑Tree是最好的选择,将菜单项直接写到Tree中,也未尝不可,但后期的维护会非常麻烦,那么最好的选择就是异步获取菜单节点,这样既有利于后期维护,也可以节省JS代码的编写量。

实现异步加载,那必须要有数据库和服务端程序。管理系统使用的是ACCESS数据库。在数据库中建立Menu表,表一共有4个字段,分别是ID、MenuName、ParentID和cls.

ID:自增长类型

MenuName:代表菜单的名字。ParentID

ParentID:父ID

cls:样式名(这个需要在样式表中体现出来,才会有效果)

数据库有了,接下来就是服务端的编写,其实JS框架的好处在于服务端无论用什么都可以,这里我就使用ASP来实现了。由于服务端涉及的方面比较多,较多代码帖出来会比较乱,这里只说下返回的形式。

菜单需要的JSON数据格式如下:

1.[{"text":"管理员管理","id":"1","iconCls":"manage","leaf":true}]

这里注意一点:由于整棵菜单树都是异步获取的,所以节点并不需要递归,而树的node.id就是JSON数据中的ID。点击父节点展开子节点的时候,发送的数据也是node.id,这样正好解决获取子节点的问题。所有根节点的ParentID都为0。那么第一次加载菜单的时候,正好可以获取所有的根节点了。

重点,菜单树的数据源编写,根据MVC原则,在app目录下建立store文件夹,这个文件夹下放置所有的获取数据的js文件,在store文件夹下建立Menus.js,编写如下代码:

1.Ext.define('SMS.store.Menus',{

2.extend: 'Ext.data.TreeStore',

3.root: {

4.expanded: true

5.},

6.proxy: {

7.type: 'ajax',

8.url: '/server/MenuLoader.asp'

9.}

10.

11.})

然后修改view文件夹下的Menu.js文件:

1.Ext.define('SMS.view.Menu',{

2.extend: 'Ext.tree.Panel',

3.alias: 'widget.smsmenu',

4.requires:['SMS.store.Menus'],

5.initComponent : function(){

6.Ext.apply(this,{

7.id: 'menu-panel',

8.title: '系统菜单',

9.iconCls:'icon-menu',

10.margins : '0 0 -1 1',

11.region:'west',

12.border : false,

13.enableDD : false,

14.split: true,

15.width : 212,

16.minSize : 130,

17.maxSize : 300,

18.rootVisible: false,

19.containerScroll : true,

20.collapsible : true,

21.autoScroll: false,

22.store:Ext.create('SMS.store.Menus'),

23.});

24.this.callParent(arguments);

25.}

26.})

如此,当页面打开时,就会自动加载菜单项了。但是目前来说,点击菜单的任何节点都没有任何作用,那么由于整个项目都要使用Extjs来完成,那么必须要实现点击节点在右边内容区显示相应的Grid或Panel等等。下面,我们编写代码实现这个功能。

原理:当点击菜单树的节点时,先要判断要打开的组件是否存在,如果存在,则在右边内容区激活当前组件,如果不存在,则创建一个组件,然后在右边内容区增加一个组件。当然。这里为了通用性更高,创建出的组件一律按panel为准。为了实现在右边内容区的tabPanel上增加或删除对应的table,根据分离原则,我们需要在控制器上完成该操作,接下来,我们在controller文件夹下建立Menu.js文件,Menu.js会完成这一系列的工作,具体代码如下:

1.Ext.define('SMS.controller.Menu',{

2.extend: 'Ext.app.Controller',

3.refs:[

4.{ref: 'smsmenu',selector: 'smstablepanel'},

5.{ref: 'tabPanel',selector:'smstablepanel'}

6.],

7.init:function(){

8.this.control({

9.'smsmenu': {

10.itemmousedown: this.loadMenu

11.}

12.})

13.},

14.loadMenu:function(selModel, record){

15.if (record.get('leaf')) {

16.var panel = Ext.getCmp(record.get('id'));

17.if(!panel){

18.panel ={

19.title: 'New Tab ' + record.get('id'),

20.iconCls: 'tabs',

21.html: 'Tab Body ' + record.get('id') + '

',

22.closable: true

23.}

24.this.openTab(panel,record.get('id'));

25.}else{

26.var main = Ext.getCmp("content-panel");

27.main.setActiveTab(panel);

28.}

29.}

30.

31.},

32.openTab : function (panel,id){

33.var o = (typeof panel == "string" ? panel : id || panel.id);

34.var main = Ext.getCmp("content-panel");

35.var tab = main.getComponent(o);

36.if (tab) {

37.main.setActiveTab(tab);

38.} else if(typeof panel!="string"){

39.panel.id = o;

40.var p = main.add(panel);

41.main.setActiveTab(p);

42.}

43.}

44.

45.})

关键点:refs和this.control,refs在官方API中没有找到其解释,网上查了下,对该属性的解释是:凡是component都可以使用该属性在它的归属容器及归属容器的父节点中注入一个对该属性的引用名称。有了该引用名,和该组件有共同父节点的组件就可以比较方便的引用该组件。

而this.control则很容易理解了,即通过https://www.360docs.net/doc/d317500452.html,ponentQuery为选定的组件添加监听。上面代码为我们的菜单节点添加了一个事件loadMenu,loadMenu中,先获取对应的panel,如果该panel不存在,则使用openTab方法在内容区的tabPanel上增加一个panel,如果存在,则激活该panel。而panel不存在的话,这里只简单的创建了一个panel,并没有任何意义,下篇文章,我们将详细讨论这个问题。

最后,我们需要修改app.js,将我们创建的控制器加载进来。app.js:

1.Ext.Loader.setConfig({enabled: true});

2.Ext.application({

https://www.360docs.net/doc/d317500452.html,: 'SMS',

4.appFolder: 'app',

5.autoCreateViewport:true,

6.controllers: [

7.'Menu'

8.]

9.});

这里唯一修改的地方就是将Main改为了Menu。后面,我们会逐步完善。

今天的工作比较多,整理下今日的工作内容:

1、在app目录下建立了store文件夹,并建立了Menus.js文件,这个文件负责菜单数据的加载。

2、修改了view文件夹下的Menu.js,使其可以加载菜单数据。

3、在controller文件夹下建立了Menu.js,使其可以在内容区的tabPanel上增加新的panel 组件。

4、修改app.js,使其可以使菜单项正常使用。

ExtJS4学习笔记(四)---Grid的使用

Extjs4 Grid创建还是比较容易的,难记、难理解的地方,也就是数据的获取。下面,就创建一个最简单的Grid组件,后面,我们会逐渐丰富这个Grid的功能。

Extjs4 Grid创建还是比较容易的,难记、难理解的地方,也就是数据的获取。下面,就创建一个最简单的Grid组件,后面,我们会逐渐丰富这个Grid的功能。

HTML代码:

1.

"https://www.360docs.net/doc/d317500452.html,/TR/xhtml1/DTD/xhtml1-transitional.dtd">

2.

3.

4.

5.https://www.360docs.net/doc/d317500452.html,

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

grid.js:

1.Ext.require([

2.'Ext.grid.*',

3.'Ext.data.*'

4.]);

5.Ext.onReady(function(){

6.Ext.define('MyData',{

7.extend: 'Ext.data.Model',

8.fields: [

9.//第一个字段需要指定mapping,其他字段,可以省略掉。

10.{name:'UserName',mapping:'UserName'},

12.'Age',

13.'XueHao',

14.'BanJi'

15.]

16.});

17.

18.//创建数据源

19.var store = Ext.create('Ext.data.Store', {

20.model: 'MyData',

21.proxy: {

22.//异步获取数据,这里的URL可以改为任何动态页面,只要返回JSON数据即可

23.type: 'ajax',

24.url: 'mydata.json',

25.

26.reader: {

27.type: 'json',

28.root: 'items',

29.//totalProperty : 'total'

30.}

31.},

32.autoLoad: true

33.});

34.

35.//创建Grid

36.var grid = Ext.create('Ext.grid.Panel',{

37.store: store,

38.columns: [

39.{text: "姓名", width: 120, dataIndex: 'UserName', sortable: true},

40.{text: "性别", flex: 1, dataIndex: 'Sex', sortable: false},

41.{text: "年龄", width: 100, dataIndex: 'Age', sortable: true},

42.{text: "学号", width: 100, dataIndex: 'XueHao', sortable: true},

43.{text: "班级", width: 100, dataIndex: 'BanJi', sortable: true}

44.],

45.height:400,

46.width:480,

47.x:20,

48.y:40,

49.title: 'ExtJS4 Grid示例',

50.renderTo: 'demo',

51.viewConfig: {

52.stripeRows: true

53.}

54.})

mydata.json:当然,你也可以使用任意服务端程序返回json数据(asp?.net?java还是php,看你的爱好了)

1.{

2."items": [

3.{

4."UserName": "李彦宏",

5."Sex": "男",

6."Age":25,

7."XueHao":00001,

8."BanJi":"一班"

9.},

10.{

11."UserName": "马云",

12."Sex": "男",

13."Age":31,

14."XueHao":00002,

15."BanJi":"二班"

16.},

17.{

18."UserName": "张朝阳",

19."Sex": "男",

20."Age":30,

21."XueHao":00003,

22."BanJi":"一班"

23.},

24.{

25."UserName": "朱俊",

26."Sex": "男",

27."Age":28,

28."XueHao":00004,

29."BanJi":"一班"

30.},

31.{

32."UserName": "丁磊",

33."Sex": "男",

34."Age":29,

35."XueHao":00005,

36."BanJi":"二班"

37.},

38.{

39."UserName": "李国军",

40."Sex": "男",

41."Age":30,

42."XueHao":00006,

43."BanJi":"二班"

44.},

45.{

46."UserName": "王志宝",

47."Sex": "男",

48."Age":25,

49."XueHao":00007,

50."BanJi":"一班"

51.}

52.]

53.}

Extjs4 Grid组件的数据需要几点注意。

第一,就是数据类型,我们可以指定数据类型,比如:

1.var store = Ext.create('Ext.data.ArrayStore', {

2.fields: [

3.{name: 'company'},

4.{name: 'price', type: 'float'},

5.{name: 'change', type: 'float'},

6.{name: 'pctChange', type: 'float'},

7.{name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}

8.],

9.data: myData

10.});

数据类型分为以下几种:

1、auto(默认)

2、string

3、int

4、float

5、boolean

6、date

第二:Ext.data.Model,示例中,只指定了一个mapping,那么第一个mapping是必须要指定的,从第二个开始,我们就不需要再去指定mapping了,Extjs很聪明,他会根据数据来判断需要的mapping。

Extjs4开发笔记(五)——动态grid

现在为止,框架有了,菜单有了。下一步工作就是实现每个菜单项目的数据显示,一般来讲,我们都是固定思维,通过编写大量的grid来实现各种数据的显示,在网络上有一些案例,都是每一个菜单项目,写一个grid,而且点击树节点,都是通过判断或其他方法来创建相应上一节我们说了如何实现登录,其地址是:Extjs4开发笔记(四)——实现登录功能。现在为止,框架有了,菜单有了。下一步工作就是实现每个菜单项目的数据显示,一般来讲,

我们都是固定思维,通过编写大量的grid来实现各种数据的显示,在网络上有一些案例,都是每一个菜单项目,写一个grid,而且点击树节点,都是通过判断或其他方法来创建相应grid的实例,例如:

1.if(node.id=="depmanage"){

2.panel = new depManagePanel();

3.main.openTab(panel);

4.}else if(node.id=="telmanage"){

5.panel = new telManagePanel();

6.main.openTab(panel);

7.}else if(node.id=="usermanage"){

8.panel = new userManagePanel();

9.main.openTab(panel);

10.}else if(node.id=="userlog"){

11.panel = new operationPanel();

12.main.openTab(panel);

13.}else{.....}}

但是在很多优秀的案例中,也不排除动态生成gird的可能,至少目前为止,我没见过此种案例,可能是孤陋寡闻吧。。

在这个项目的开发过程中,我不断思考,是否能动态生成grid,使得工作一劳永逸。在查阅一些资料和自己动手尝试后,发现这样的办法可行,但前提是,需要服务端支持。单纯从开发角度来讲,我感觉这样的方法更加适合实际的开发。

在本节开始前,我们先来看一个问题。

树节点服务端返回的json数据:看了API之后,发现树的sotre返回json数据后,如果不指定其fields,那么再整个树的节点集合中,只有固定的几种属性值,即text,id、iconCls 和leaf(注意:这里只是例举了这几种常见的属性值,至于其他的属性值,还是留给大家去探究吧)。所以大多数网友问我,为什么自定义的属性值,在extjs4.0中使用record.get("xxxx")为什么获取不到?这其中的原因就是在store中没有指定fields。也就是说,在本项目中,如果菜单树不指定fields,那么是无法往下进行开发的。

回到正题,要实现动态创建grid,我们先要可以让树有很多属性供我们所用,新建Menu.js,将这个js文件放置到app/model文件夹下。其代码为:

1.Ext.define('SMS.model.Menu', {

2.extend: 'Ext.data.Model',

3.fields: ['id', 'text','iconCls','stores','columns'],

4.root: {

5.expanded: true

6.},

7.proxy: {

8.type: 'ajax',

9.url: '/server/MenuLoader.asp'

10.}

11.})

12.

MenuLoader.asp返回如下json:

1.[{"text":"备案列表","id":"4","iconCls":"Folder","stores":"bastore","columns":[{text:'序号

',dataIndex:'ID'},{text:'公司名称',dataIndex:'kehu_name'}],"leaf":true},{"text":"新增备案

","id":"5","iconCls":"Folder","stores":"","columns":[],"leaf":true}]

2.

修改app/store下的Menus.js,更改为如下代码:

1.Ext.define('SMS.store.Menus',{

2.extend: 'Ext.data.TreeStore',

3.requires: 'SMS.model.Menu',

4.model: 'SMS.model.Menu'

5.})

新建bastore.js,将其放到app/store目录下,代码为:

1.Ext.define('SMS.store.bastore', {

2.extend: 'Ext.data.Store',

3.requires: 'SMS.model.beianlistmodel',

4.model: 'SMS.model.beianlistmodel'

5.});

6.

7.

8.

新建beianlistmodel.js,将其放到app/model目录下,其代码为:

1.Ext.define('SMS.model.beianlistmodel', {

2.extend: 'Ext.data.Model',

3.fields: ['ID', 'kehu_name']//,这里只列出了自增值id和客户名称。

4.

5.//proxy: {

6.// type: 'ajax',

7.// url: '/server/getbeianlist.asp',

8.// reader: {

9.// type: 'json',

10.// root: 'results'

11.// }

12.// }

13.});

服务端代码没有编写,所以将获取数据的代码暂时注释掉。

接下来,我们修改app/controller目录下的Menu.js,增加一个stores属性,其代码为

stores: ['bastore'],

然后将测试代码

1.if (record.get('leaf')) {

2.var panel = Ext.getCmp(record.get('id'));

3.if(!panel){

4.panel ={

5.title: 'New Tab ' + record.get('id'),

6.iconCls: 'tabs',

7.html: 'Tab Body ' + record.get('id') + '

',

8.closable: true

9.}

10.this.openTab(panel,record.get('id'));

11.}else{

12.var main = Ext.getCmp("content-panel");

13.main.setActiveTab(panel);

14.}

15.}

16.

全部删除,重新写如下代码:

1.if (record.get('leaf')) {

2.var panel = Ext.getCmp(record.get('id'));

3.if(!panel){

4.panel = Ext.create("Ext.grid.Panel",{

5.store:record.get('stores'),

6.columns:record.get('columns'),

7.title: record.get('text'),

8.id:record.get('text')+record.get('id'),

9.viewConfig: {

10.stripeRows: true

11.},

12.closable: true

13.})

14.this.openTab(panel,record.get('id'));

15.}else{

16.var main = Ext.getCmp("content-pane");

17.main.setActiveTab(panel);

18.}

19.}

20.

稍做说明:Ext.create("Ext.grid.Panel"..... 首先创建了一个gridpanel,由于我们增加了菜单树的fields属性,那么我们可以获取所有fields指定的属性值,通过上面的json数据

{"text":"备案列表","id":"4","iconCls":"Folder","stores":"bastore","columns":[{text:'序号',dataIndex:'ID'},{text:'公司名称',dataIndex:'kehu_name'}],"leaf":true}

我们就实现了动态生成grid。app/controller目录下的Menu.js全部代码为:

1.Ext.define('SMS.controller.Menu',{

2.extend: 'Ext.app.Controller',

3.refs:[

4.{ref: 'smsmenu',selector: 'smstablepanel'},

5.{ref: 'tabPanel',selector:'smstablepanel'}

6.

7.],

8.stores: ['bastore'],

9.init:function(){

10.this.control({

11.'smsmenu': {

12.itemmousedown: this.loadMenu

13.}

14.})

15.},

16.loadMenu:function(selModel, record){

17.if (record.get('leaf')) {

18.var panel = Ext.getCmp(record.get('id'));

19.if(!panel){

20.panel = Ext.create("Ext.grid.Panel",{

21.store:record.get('stores'),

22.columns:record.get('columns'),

23.title: record.get('text'),

24.id:record.get('text')+record.get('id'),

25.viewConfig: {

26.stripeRows: true

27.},

28.closable: true

29.})

30.this.openTab(panel,record.get('id'));

31.}else{

32.var main = Ext.getCmp("content-pane");

33.main.setActiveTab(panel);

34.}

35.}

36.

37.},

38.openTab : function (panel,id){

39.var o = (typeof panel == "string" ? panel : id || panel.id);

40.var main = Ext.getCmp("content-pane");

41.var tab = main.getComponent(o);

42.if (tab) {

43.main.setActiveTab(tab);

44.} else if(typeof panel!="string"){

45.panel.id = o;

46.var p = main.add(panel);

47.main.setActiveTab(p);

48.}

49.}

50.

51.})

52.

声明,进行一个Extjs4.0MVC模式开发,是一个尝试的过程,随着Extjs4.x的不断升级、改进和修复,可能会造成当前项目无法运行或者报错,mhzg会持续关注extjs的最新动态,如果有大幅改动,https://www.360docs.net/doc/d317500452.html,会将最新的extjs4版本下载到本地进行测试,如果本项目无法运行,那么https://www.360docs.net/doc/d317500452.html,会进行修复并在https://www.360docs.net/doc/d317500452.html,上发布补充文档进行说明和修正。而在整个开发过程中,难免会有一些地方不尽人意,欢迎大家相互探讨、研究,共同进步,extjs4开发笔记将在第六章更名为extjs4 MVC 开发笔记,请大家持续关注,谢谢!!

Extjs4开发笔记(六)——数据的增删改

上一章,我们介绍了动态Grid的显示,其地址是:Extjs4开发笔记(五)——动态grid,在上一章,我们只做了数据的显示,并没有添加、删除和修改功能,本章内容,介绍如何进行添加、删除和修改。

上一章,我们介绍了动态Grid的显示,其地址是:Extjs4开发笔记(五)——动态grid,在上一章,我们只做了数据的显示,并没有添加、删除和修改功能,本章内容,介绍如何进行添加、删除和修改。

一般的项目中,Gird功能不是很复杂的话,都会使用window来实现数据的添加、修改功能,而本实例中,由于使用了动态grid功能,这样就使得再使用动态window来实现数据的添加和修改就会变的非常困难。

幸好,Grid有RowEditing,下面,我们就用RowEditing来实现数据的添加和修改功能。在开始之前,我们先回顾下上一章的一些重点内容:

1、给Menu增加了field属性,使得我们在数据库中的一些字段可以被当做是Menu的节点集合中的对象来调用。

2、给菜单表增加了两个字段,分别是store和columns。在app/store/文件夹下,我们新建了bastore.js文件,那么再数据库中对应的字段中,填写内容为bastore,在columns字段中,我们添加了内容为{text:'序号',dataIndex:'ID'},{text:'公司名称',dataIndex:'kehu_name'}的数据。

最后,我们修改了Menu.js文件,使得Grid可以显示数据。

现在,我们修改columns中的数据为:

1.{text:'序号',dataIndex:'ID',width:50},{text:'公司名称

',dataIndex:'kehu_name',width:260,editor:{allowBlank: false}},{text:'备案号

',dataIndex:'beianhao',width:140,editor:{allowBlank: false}},{text:'备案密码

',dataIndex:'beianpass',width:100,editor:{allowBlank: false}},{text:'备案邮箱

',dataIndex:'beianemail',width:160,editor:{allowBlank: false}},{text:'备案邮箱密码

',dataIndex:'emailpass',width:120,editor:{allowBlank: false}},{text:'备案账号

',dataIndex:'beianzh',width:160,editor:{allowBlank: false}},{text:'账号密码

',dataIndex:'beianzhpa',width:120,editor:{allowBlank: false}}

在这些数据中,将所有字段都列了出来,并且制定了editor中allowBlank的数据位flase,就是说,这些内容必须填写。

接下来,我们需要修改app/controller下的menu.js文件,增加一些功能,使其可以添加、删除信息。修改内容如下:

1.if (record.get('leaf')) {

2.var panel = Ext.getCmp(record.get('id'));

3.if(!panel){

4.Ext.require(['Ext.grid.*']);

5.var rowEditing = Ext.create('Ext.grid.plugin.RowEditing',{

6.clicksToMoveEditor: 1,

7.autoCancel: true

8.});

9.panel = Ext.create("Ext.grid.Panel",{

10.store:record.get('stores'),

11.columns:record.get('columns'),

12.errorSummary:false,

13.title: record.get('text'),

14.id:record.get('text')+record.get('id'),

15.columnLines: true,

16.bodyPadding:0,

17.closable: true,

18.bbar: Ext.create('Ext.PagingToolbar', {

19.store: record.get('stores'),

20.displayInfo: true,

21.displayMsg: '显示{0} - {1} 条,共计{2} 条',

22.emptyMsg: "没有数据"

23.}),

24.dockedItems: [{

25.xtype: 'toolbar',

26.items: [{

27.text: '增加信息',

28.iconCls: 'icon-add',

29.handler: function(){

30.rowEditing.cancelEdit();

31.var panelStore = this.up("panel").getStore();

中文版word基础教程

W o r d 2003基础教程 编 撰 花 椒 文 刀 版权归属:中国盲文出版社信息无障碍中心盲人挚友聊天室 前 言 结合阳光读屏软件强大的Word 朗读功能, 由信息无障碍中心开办的于2008年11月至 2009年3 月,推出在线《Word2003基础讲座》。同期,我们将讲座内容编纂成册,免费提供给 阳光软件的广大用户,以便查阅。 本教程用Word2003编写, 您可以通过单击目录快速跳转到需要查阅的文本,具体操作方法是:用上下光标逐行朗读目录,听到您想查阅的条目后,按下 Ctrl+小键盘的斜杠键,这样,光标会自动跳转到目录对应的文本,以方便您的查阅,同时,在阅读过程中,教程所提及的所有操作,您均可在当前窗口尝试,当然,为了保持教程的完整,建议您在关闭本 教程时选择不保存修改。 本教程由阳光软件免费提供,版权归属中国盲文出版社信息无障碍中心盲人挚友聊天室, 请勿用于商业用途,违者必究。

目录 第一章 初识中文版Word2003 中文版word2003是微软公司推出的中文版office2003软件套装中的重要组成部分,它具有 强大的文本编辑和文件处理功能,是实现无纸化办公和网络办公不可或缺的应用软件之一。 第一节安装、启动和退出程序 一、安装程序 安装word2003和安装其它软件并无二致,需要说明一下的是光盘版的安装。当您将中文版 office2003光盘放入光驱后,请不要自动播放,因为自动播放会弹出图形化的安装界面,读 屏软件无法操作。您可以在插入光盘后,打开“我的电脑”找到CD驱动器,application键 弹出快捷菜单,通过“打开(O)菜单”来打开光盘,然后在列表中选中office文件夹,打开 以后,列表中出现几个文件夹,由于版本不同,文件夹数量和名称可能会略有区别,不过没 关系,在这些文件夹中寻找setup.exe并回车执行,您就能顺利地用键盘完成安装操作了。 二、启动程序 按下Windows键弹出“「开始」菜单”,展开“所有程序(P)菜单”后。上下光标到 “MicrosoftOffice子菜单”,右光标展开该子菜单后,上下光标找到 “MicrosoftOfficeWord2003菜单”回车即可启动Word程序。另外,当您在资源管理器中选 择任意一个后缀名为.doc的文档回车时,计算机也会为您启动word程序,同时打开您选中 的文档。 三、退出程序 在程序窗口按下快捷键:“Alt+F4”是退出程序最简便的方法。当然您还可以在程序窗口按下 Alt键激活菜单栏,下光标展开“文件(F)子菜单”并找到到“退出(X)菜单”回车,或在程 序窗口按下“Alt+空格”弹出控件菜单,上下光标找到“关闭(c)菜单”回车即可退出程序。

Scratch2.0入门中文使用教程

儿童编程 SCRATCH2.0入门中文使用教程 目录: 1. Scratch的简介 第1课下载与安装 第2课初识Scratch 2.Scratch基础课程 第3课让角色动一动 第4课键盘控制 第5课迷宫程序 第6课会飞的巫婆 第7课三角形的面积 第8课造型切换---人物走动 第9课移动人物教师进阶使用 第10课判断人物位置 3. Scratch进阶课程--打蝙蝠 3-1 第一节课 3-2 第二节课 3-3 第三节课

4. scratch进阶课程2-打地鼠 4-1 设计背景、铁锤及地鼠 4-2 撰写地鼠的程序 4-3 撰写铁锤程序 4-4 分数的计算 5. 接球游戏 5-1 设计球部份的程序 5-2 人物部份的程序 5-3 程序计分 5-4 扣分的构想 6.如何分享SCRATCH作品 7.如何把sb2文件转化成swf格式的flash文件

SCRATCH2.0入门中文使用教程 1. Scratch的简介 Scratch是 MIT (麻省理工学院) 发展的一套新的程序语言,可以用来创造交互式故事、动画、游戏、音乐和艺术。很适合8岁以上儿童使用,目前1.4版已经完全支持中文界面,更方便使用,完全不用背指令,使用积木组合式的程序语言,让学习变得更轻松,并充满乐趣。 官方网站:https://www.360docs.net/doc/d317500452.html,/ 目前已经推出2.0版本,支持在线和离线模式。 由于国外网站速度较慢,gateface门面,已经集成了scratch的程序,所以只要安装了伽卡他卡电子教室(15.5以上版本)或这个gateface5.5以上版本,都有scratch,不用另外安装。(伽卡他卡电子教室集成了gateface,scratch在gateface的门面编辑器里,点击相应按钮,就可以启动scratch) Gateface门面中,集成的是离线程序,可以不用登录scratch网站,在本机使用。搜索伽卡他卡电子教室或者gateface都可以到官网或者华军下载。 分享SCRATCH作品的方法: 方法1:放到网站共享。SCRATCH网站,可以上传sb2格式的文件,这样,别人通过访问SCRATCH网站来访问你的作品,需要在SCRATCH

ArchiCAD入门中文教程

ArchiCAD中文教程 带领您进入ArchiCAD的世界,一步一步地创建一个虚拟建筑。 步骤 00 –介绍 (1) 步骤 01 –建立布局 (4) 步骤 02 –利用楼层 (18) 步骤 03 –完成建筑封顶 (23) 步骤 04 –发展设计 (28) 步骤 05 –添加门窗 (38) 步骤 06 –增加楼梯 (52) 步骤 07 –定义房间用途和空间 (57) 步骤 08 –增加最终细节 (61) 步骤 09 –测量和估算建筑成本 (65) 步骤 10 –向客户演示 (69) 步骤 00 –介绍 我们将向您展示使用一个物体模型是多么容易的一件事,30分钟内您将完成所有的建筑系统,为您的客户和项目合作伙伴递送高质量的设计和图纸,ArchiCAD 虚拟建筑使用的概念都是您司空见惯的,如如墙、门、楼板和屋顶等,我们的演示过程是符合您传统的设计方式的,不过不是二维中的绘图,而是使用了三维几何和其他属性的智能物体。 “The ArchiCAD in 30 minutes”光盘包含的是一个提供仅限制了保存和打印功能的该软件的演示版。安装好后,我们将带来您完成10个步骤,每个步骤的ArchiCAD 项目文件都可以在ArchiCAD 8.0 Demo/ArchiCAD in 30 minutes目录下找到,您

必须在一次完成一个步骤,因为您不能保存,您只需要打开对应步骤的文件,该步骤之前的所有步骤完成的内容都有。 您将学习创建一个小展览室,底楼是展览空间,二楼为画廊,以及其他一些员工和参观者所需要的日常设施。 建筑平面图如下,不同的用户界面元素将帮您完成建筑该项目。

AVL_FIRE中文入门教程

流场分析的基本流程(FIRE软件) ID:qxlqixinliang 一、网格自动生成 (2) 二、网格划分工具的使用 (5) 1、Mesh tools (5) 2、surface tools (7) 3、edge tools (7) 三、网格和几何信息工具 (8) 1、网格check (8) 2、Geo info (9) 四、流场求解求解器的设置 (9)

一、网格自动生成 根据电池包内部流场的特点,我们一般使用fame的网格自动生成和手动划分网格,两者相结合基本上能完成网格划分。对于电池数量较少的模型(如下图)完全可以用网格自动生成功能来实现网格划分。 下面介绍网格自动生成的流程: 1)准备面surface mesh和线edge mesh:要求:面必须是封闭曲面,一般FIRE中可以应用的是.stl的文件,在PRO/E,CATIA 等三维的造型软件中都可以生成;与面的处理相似的还要准备边界的线数据 2)Hybrid assistant,选择start new meshing,分别定义表面网格define surface mesh和线网格define edge mesh 3)然后进入高级选项fame advanced hybrid,在这里定义最大网格尺寸和最小网格尺寸,最大网格尺寸是最小网格尺寸的2^n倍 4)选择connecting edge,一般在计算域的进出口表面建立face selection,这样可保证edge 处的网格贴体,否则网格在几何的边角会被圆滑掉,另外还可以保证进出口面的网格方向与气流方向正交,有利于计算的精确性和收敛性。通过add添加上进出口的selection 即可。

MathType6.9中文基础教程之一

MathType6.9 中文入门教程 (一) MathType 实现“所见即所得”的工作模式,是一个强大的数学公式编辑器。它可以将编辑好的公式保存成多种图片格式或透明图片模式,可以很方便的添加或移除符号、表达式等模板(只需要简单地用鼠标拖进拖出即可),也可以很方便地修改模板。MathType 与常见的文字处理软件和演示程序配合使用,能够在各种文档中加入复杂的数学公式和符号,可用在编辑数学试卷、书籍、报刊、论文、幻灯演示等方面,是编辑数学资料的得力工具。 本教程为中文基础教程系列之一——手把手教你快速入门

练习一:分式与根式 (6) 打开MathType (6) 创建等式 (6) 1.输入y= (7) 2. 输入根式符号了 (7) 3.输入分式模板 (7) 4.输入数字 (8) 5.移动光标 (8) 6.输入数字 (8) 7.增加sinx (8) 8.插入点光标 (9) 9. 输入-c (9) 10.加上角标 (9) 11.输入数字2 (10) 12.点按±键 (10) 13.选择m (10) 14.输入tan x (10) 练习二:总和,上标和下标 (11) 1.打开一个Word文档 (11) 2.选择插入 (11) 3.输入 (11) 4.创建一个上标的位置 (12)

5.输入上标数字 (12) 6.移动插入点 (12) 7.输入= (12) 8.构建分式 (12) 9.插入点定位 (13) 10.使用Tab键 (13) 11.输入总和模板 (13) 12.插入一组圆括号 (13) 13.输入字母x (13) 14.给x附加下标 (13) 15.输入-x (13) 16.给x上增加一横线 (13) 17.按下Tab键 (13) 18.输入上标数字2 (14) 19.按下Tab键 (14) 20.按下Tab键 (14) 练习三:编辑修改练习二的等式 (15) 1.打开文档 (16) 2.选中项目 (16) 3.删除项目 (16) 4.输入字母 (16) 5.全选所有部分 (16)

PCSchematic中文入门教程

创建一个自动化方案 本章节将示范如何完成您的第一个自动化方案。它包括五个步骤,每一个步骤都有些范例, 将示范您如何完成设计方案中的各个部分。 本章内容简介 第一步:创建一个控制回路图,在设计方案和页面中输入数据,布置导线符 号,使用数据库及保存设计方案…………………………………………(第1页)第二步:创建一个主回路图,布置绘图模板,恰当地排列符号文本,移动电 路号,打印页面……………………………………………………………(第13页)第三步:自动导线编号………………………………………………………………(第21页) 第四步:布置元件……………………………………………………………………(第22页) 第五步:制作信息清单,并更新清单………………………………………………(第25页) 在PROJECT文件夹里,您会发现五个文件,其中的内容对应方案的各个部分。因此,您 既可以从头开始学习整个章节的内容,也可以选择一个主题,学习您感兴趣的部分。通过上 面的摘要,您可以选择想要学习的主题。 如果您想很快地完成这一章的学习,可以跳过文本框。 接下来,在位于第86页的“创建一个PLC方案”一节中,将详细介绍更多的功能。 一些预置的功能,例如设计方案章节和区域内的参考符号,没有在这部分阐述。在 演示方案.PRO这一设计方案中将应用其中一些功能。 如果您对“Windows”不熟悉,应在学习后面的课程前阅读“Windows”内容。 1.画控制回路图 打开一个已有的设计方案 点击位于程序工具栏的打开文件按钮(快捷键[Ctrl+o])。打开PROJECT文件夹,然后双 击设计方案文件开始2.pro。现在会打开这个设计方案文件。 ——如果您不熟悉如何使用“Windows”打开文件/方案,可以阅读位于26页的“Windows” 内容。 设计方案内容 设计方案开始2.pro中包含一些已经生成的页面: 1)页面F1是扉页。 2)页面I1是目录表。 3)页面1是画控制回路图页面。 4)页面2是零部件清单模板。 5)页面3是元器件清单模板。 6)页面4是接线端子清单模板。 比思 (香港,深圳,上海,北京) 电子有限公司 https://www.360docs.net/doc/d317500452.html, kgs@https://www.360docs.net/doc/d317500452.html, Page 1

Scratch20入门中文使用教程

SCRATCH2.0入门中文使用教程 目录: 1. Scratch的简介 第1课下载与安装 第2课初识Scratch 2.Scratch基础课程 第3课让角色动一动 第4课键盘控制 第5课迷宫程序 第6课会飞的巫婆 第7课三角形的面积 第8课造型切换---人物走动 第9课移动人物教师进阶使用 第10课判断人物位置 3. Scratch进阶课程--打蝙蝠 3-1 第一节课 3-2 第二节课 3-3 第三节课

4. scratch进阶课程2-打地鼠 4-1 设计背景、铁锤及地鼠 4-2 撰写地鼠的程序 4-3 撰写铁锤程序 4-4 分数的计算 5. 接球游戏 5-1 设计球部份的程序 5-2 人物部份的程序 5-3 程序计分 5-4 扣分的构想 6.如何分享SCRATCH作品 7.如何把sb2文件转化成swf格式的flash文件

SCRATCH2.0入门中文使用教程 1. Scratch的简介 Scratch是 MIT (麻省理工学院) 发展的一套新的程序语言,可以用来创造交互式故事、动画、游戏、音乐和艺术。很适合8岁以上儿童使用,目前1.4版已经完全支持中文界面,更方便使用,完全不用背指令,使用积木组合式的程序语言,让学习变得更轻松,并充满乐趣。 官方网站:https://www.360docs.net/doc/d317500452.html,/ 目前已经推出2.0版本,支持在线和离线模式。 由于国外网站速度较慢,gateface门面,已经集成了scratch的程序,所以只要安装了伽卡他卡电子教室(15.5以上版本)或这个gateface5.5以上版本,都有scratch,不用另外安装。(伽卡他卡电子教室集成了gateface,scratch在gateface的门面编辑器里,点击相应按钮,就可以启动scratch) Gateface门面中,集成的是离线程序,可以不用登录scratch网站,在本机使用。搜索伽卡他卡电子教室或者gateface都可以到官网或者华军下载。 分享SCRATCH作品的方法: 方法1:放到网站共享。SCRATCH网站,可以上传sb2格式的文件,这样,别人通过访问SCRATCH网站来访问你的作品,需要在SCRATCH

ArcGIS中文基础教程

第一章GIS 的概念和需求 理解GIS的三种角度: GIS是一个用于管理、分析和显示地理信息的系统。地理信息可以通过一系列地理数据集来表达。而地理数据集则通过使用简单的,普通数据结构来为地理信息建模。GIS包含了一套用以处理地理数据的综合工具。 我们可以从多个角度来理解地理信息系统是如何工作于地理信息的: 1.从空间数据库的角度看:GIS是一个包含了用于表达通用GIS数据模型(要素、栅格、拓扑、网络等等)的数据集的空间数据库。 2.从空间可视化的角度看:GIS是一套智能地图,同时也是用于显示地表上的要素和要素间关系的视图。底层的地理信息可以用各种地图的方式进行表达,而这些表现方式可以被构建成“数据库的窗口”,来支持查询、分析和信息编辑。 3.从空间处理的角度看:GIS是一套用来从现有的数据集获取新数据集的信息转换工具。这些空间处理功能从已有数据集提取信息,然后进行分析,最终将结果导入到数据集中。 这三种观点在ESRI ArcGIS中分别用ArcCatalog(GIS是一套地理数据集的观点)、ArcMap(GIS是一幅智能的地图)和ArcToolbox(GIS是一套空间处理工具)来表达。这三部分是组成一个完整GIS的关键内容,并被用于所有GIS 应用中的各个层面。 从空间数据库的角度: GIS是世界上独一无二的一种数据库――空间数据库(Geodatabase)。它是一个“用于地理的信息系统”。从根本上说,GIS是基于一种使用地理术语来描述世界的结构化数据库 这里我们来回顾一些在空间数据库中重要的基本原理。 地理表现形式 作为GIS空间数据库设计工作的一部分,用户要指定要素该如何合理的表现。例如,地块通常用多边形来表达,街道在地图中是中心线(centerline)的形式,水井表现为点等等。这些要素会组成要素类,每个要素类都有共同的地理表现形式。 每个GIS数据集都提供了对世界某一方面的空间表达,包括: 基于矢量的要素(点、线和多边形)的有序集合

CHEMCAD中文入门教程

Chemcad在化工课程设计中的应用 指导教师:葛明兰 学生:高00-4班应伟斌 摘要:介绍了化工流程模拟软件Chemcad的特点、作用,以精馏过程的工艺设计为实例说明其应用。 关键词:Chemcad软件,设计,应用 化工课程设计是学习化工设计基础知识、培养学生化工设计能力的重要教学环节。计算机辅助化工过程设计以成为化工设计的基本手段,有效地利用化工模拟设计软件进行化工设计工作可以极大地提高工作效率。将模拟软件用于过程设计或过程模拟,对于当代的化工过程工程师已是一件很普通的工作。基于此,本院购进美国Chemstations公司化工流程模拟软件Chemcad。本文主要介绍该软件特点、模块功能作用,并以精馏过程的工艺设计实例较详细地对该软件的应用进行说明。 1.CHEMCAD软件概述: CHEMCAD系列软件是美国Chemstations公司开发的化工流程模拟软件。使用它,可以在计算机上建立与现场装置吻合的数据模型,并通过运算模拟装置的稳态或动态运行,为工艺开发、工程设计、优化操作和技术改造提供理论指导。 1.1使用CHEMCAD可以做的工作主要有以下几项: A.设计更有效的新工艺和设备使效益最大化 B.通过优化/脱瓶颈改造减少费用和资金消耗 C.评估新建/旧装置对环境的影响 D.通过维护物性和实验室数据的中心数据库支持公司信息系统 1.2CHEMCAD中的单元操作: CHEMCAD提供了大量的操作单元供用户选择,使用这些操作单元,基本能够满足一般化工厂的需要。对反应器和分离塔,提供了多种计算方法。ChemCAD可以模拟以下单元操作: 蒸馏、汽提、吸收、萃取、共沸、三相共沸、共沸蒸馏、三相蒸馏、电解质蒸馏、反应蒸馏、反应器、热交换器、压缩机、泵、加热炉、控制器、透平、膨胀机等50多个单元操作。 1.3热力学物性计算方法: CHEMCAD提供了大量的最新的热平衡和相平衡的计算方法,包含39种K值计算方法,和13种焓计算方法。K值方法主要分为活度系数法和状态方程法等四类,其中活度系数法包含有UNIFAC 、UPLM (UNIFAC for Polymers)、Wilson 、T. K. Wilson 、HRNM Modified Wilson 、Van Laar 、Non-Random Two Liquid (NRTL) 、Margules 、GMAC (Chien-Null) 、Scatchard-Hildebrand (Regular Solution)等。焓计算方法包括Redlich-Kwong 、 Soave-Redlich-Kwong 、Peng-Robinson 、API Soave-Redlich-Kwong 、Lee-Kesler 、 Benedict-Webb-Rubin-Starling 、Latent Heat 、Electrolyte 、Heat of Mixing by Gamma 等。 1.4使用CHEMCAD主要有以下步骤: A.画出您的流程图

Camtasia-studio-8.4中文基础教程之一

Camtasia Studio 8.4 中文基础教程之一 录制屏幕 Camtasia Studio 8.4 ............................................ ...................... 软件的欢迎(启动)界 面: .................................................... 录制 (Recorder) ........................................................... ......... 录制 PPT .................................................................... ............... 使用缺省设置首次录 制 .............................................................. 录制的预视窗 口 ..................................................................... ..... 改变预视的效 果 ..................................................................... ..... 其他录制选 项 ..................................................................... ......... Camtasia智能聚焦(SmartFocus)录制技巧 .......................... 录 制 ..................................................................... .................... Camtasia(TREC)格式录制文 件 ..............................................

完整版Scratch20入门中文使用教程

范文范例指导学习 儿童编程 SCRATCH2.0入门中文使用教程 目录: 1. Scratch的简介 第1课下载与安装 第2课初识Scratch 2.Scratch基础课程 第3课让角色动一动 第4课键盘控制 第5课迷宫程序 第6课会飞的巫婆 第7课三角形的面积 第8课造型切换---人物走动 第9课移动人物教师进阶使用 第10课判断人物位置 3. Scratch进阶课程--打蝙蝠 3-1 第一节课 3-2 第二节课 3-3 第三节课 版本整理分享word

范文范例指导学习 4. scratch进阶课程2-打地鼠 4-1 设计背景、铁锤及地鼠 4-2 撰写地鼠的程序 4-3 撰写铁锤程序 4-4 分数的计算 5. 接球游戏 5-1 设计球部份的程序 5-2 人物部份的程序 5-3 程序计分 5-4 扣分的构想 6.如何分享SCRATCH作品 7.如何把sb2文件转化成swf格式的flash文件 版本整理分享word 范文范例指导学习 SCRATCH2.0入门中文使用教程 1. Scratch的简介 Scratch是 MIT (麻省理工学院) 发展的一套新的程序语言,可以用来创造交互式故事、动画、游戏、音乐和艺术。很适合8岁以上儿童使用,目前1.4版已经完全支持中文界面,更方便使用,完全不用背指令,使用积木组合式的程序语言,让学习变得更轻松,并充满乐趣。 官方网站:https://www.360docs.net/doc/d317500452.html,/

目前已经推出2.0版本,支持在线和离线模式。 由于国外网站速度较慢,gateface门面,已经集成了scratch 的程序,所以只要安装了伽卡他卡电子教室(15.5以上版本)或这个gateface5.5以上版本,都有scratch,不用另外安装。(伽卡他卡电子教室集成了gateface,scratch在gateface的门面编辑器里,点击相应按钮,就可以启动scratch) Gateface门面中,集成的是离线程序,可以不用登录scratch 网站,在本机使用。搜索伽卡他卡电子教室或者gateface 都可以到官网或者华军下载。 分享SCRATCH作品的方法: 方法1:放到网站共享。SCRATCH网站,可以上传sb2格式的文件,这样,别人通过访问SCRATCH网站来访问你的作品,需要在SCRATCH版本整理分享word 学习指导范文范例 注册账号,分享上传时需要登录账号。flashswf格式的将gateface门面,sb2格式文件转化成方法2:门面空间页面里,别人直接访问门面空间,就能文件,放在gateface 看 到你的作品。下载与安装1-1 gateface15.5以上版本或者如果已经安装了伽卡他卡电子 教室门面以上版本,不需要另外安装离线版本,直接从gateface门面5.5 编辑器里启动离线程序即可使用。SCRATCH网站使用。在线版本不用安装,直接登录

Scratch2.0入门中文使用教程

SCRATCH2.0入门中文使用教程目录: 1. Scratch的简介 第1课下载与安装 第2课初识Scratch 2.Scratch基础课程 第3课让角色动一动 第4课键盘控制 第5课迷宫程序 第6课会飞的巫婆 第7课三角形的面积 第8课造型切换---人物走动 第9课移动人物教师进阶使用 第10课判断人物位置 3. Scratch进阶课程--打蝙蝠 3-1 第一节课 3-2 第二节课 3-3 第三节课 4. scratch进阶课程2-打地鼠 4-1 设计背景、铁锤及地鼠 4-2 撰写地鼠的程序 4-3 撰写铁锤程序

4-4 分数的计算 5. 接球游戏 5-1 设计球部份的程序 5-2 人物部份的程序 5-3 程序计分 5-4 扣分的构想 6.如何分享SCRATCH作品 7.如何把sb2文件转化成swf格式的flash文件

SCRATCH2.0入门中文使用教程 1. Scratch的简介 Scratch是 MIT (麻省理工学院) 发展的一套新的程序语言,可以用来创造交互式故事、动画、游戏、音乐和艺术。很适合8岁以上儿童使用,目前1.4版已经完全支持中文界面,更方便使用,完全不用背指令,使用积木组合式的程序语言,让学习变得更轻松,并充满乐趣。 官方网站:https://www.360docs.net/doc/d317500452.html,/ 目前已经推出2.0版本,支持在线和离线模式。 由于国外网站速度较慢,gateface门面,已经集成了scratch的程序,所以只要安装了伽卡他卡电子教室(15.5以上版本)或这个gateface5.5以上版本,都有scratch,不用另外安装。(伽卡他卡电子教室集成了gateface,scratch在gateface的门面编辑器里,点击相应按钮,就可以启动scratch) Gateface门面中,集成的是离线程序,可以不用登录scratch网站,在本机使用。搜索伽卡他卡电子教室或者gateface都可以到官网或者华军下载。 分享SCRATCH作品的方法: 方法1:放到网站共享。SCRATCH网站,可以上传sb2格式的文件,这样,别人通过访问SCRATCH网站来访问你的作品,需要在SCRATCH注册账号,分享上传时需要登录账号。 方法2:gateface门面,将sb2格式文件转化成swf格式的flash文件,放在gateface门面空间页面里,别人直接访问门面空间,就能看到

Tecplot_简单的中文入门教程

Tecplot的使用入门与技巧 汪继文 前言 Tecplot 是一种绘图视觉处理,使用Tecplot来驾驭您的资料会更显轻松无比,从简单的xy图到复杂的3d动态模拟,Tecplot可快捷地将大量的资料转成容易了解的图表及影象。表现方式有等高线、3d流线、网格、向量、剖面、切片、阴影、上色等… Tecplot是一种资料视觉化软件,可以进行科学计算,将电脑计算后的资料进行视觉化处理,便于更形象化地分析一些科学数据,是一种传达分析结果功能最强大的视觉化软件。Tecplot可以用来建立一个图形,二维数据的等高线和矢量图块。使用Tecplot可以很容易地在一页上建立图形和图块或者对它们进行定位。每一个图形都是在一个文本框中,而这些框架可以被复制再修改,这就会使你很容易地对一个数据集显示其不同的视图。 本文主要对Tecplot的使用做一个简单的说明,先简单介绍一下各菜单及其选项的一些基本而主要的功能,然后说明一下边框工具栏的基本用法,最后会分别就几个一维和二维图形来说明一下Tecplot中一些常用的概念和一些基本图形的处理方法。 目录 第一章菜单功能 (2) 1.1文件菜单 (2) 1.2编辑菜单 (2) 1.3视图菜单 (2) 1.4轴菜单 (2) 1.5域菜单 (3) 1.6xy菜单 (4) 1.7格式菜单 (4) 1.8数据菜单 (5) 1.9框架菜单 (5) 1.10 工作空间菜单 (6) 1.11 工具菜单 (6) 第二章边框工具栏选项的用法 (6) 第三章XY图形的绘制实例 (7) 3.1边框的编辑 (7) 3.2关于轴线坐标的编辑 (7) 3.3在XY图形中关于symbol的设置 (8) 3.4坐标调整 (8) 3.5 XY图形的存储与输出 (9) 3.6 两个XY图形的叠加 (9) 3.7 图形的复制 (10) 第四章2D和3D图形的绘制实例 (10) 4.1 文件头说明 (10) 4.2 有限元与数据的结构 (11) 4.3 等高线与3D图形的绘制 (13) 第一章:菜单功能 打开Tecplot之后,可以看到Tecplot的界面,最上面一行是菜单栏,且每一菜单下都有其对应的

中文DeltaV入门教程

1.DeltaV系统总述(略) 2. 教程总述 本教程讲述如何快速建立一个过程系统并使其运行。读者将会了解一些相关的基本概念,用于配置工作站和控制节点、定义I/O 、创建控制策略和操作画面。还可以从操作站的观察点查看系统。 硬件配置往往是一次性工作——而且在软件配置之前已经完成,所以,这一部分的信息我们放到靠后的章节中(第8章)。如果工作站还没配置,你可以看完本章之后,再看第8章。 如果工作站已经配置完成,你可以在没有操作站,和不设置I/O的情况下,进行第3章到第7章中的所有练习。不过,为了使练习更具有真实性,而且能够实现某些功能(如给操作站分配模块),读者最好进行硬件配置。 2.1 说在前面 本教程的练习,是针对一个水箱系统——包括测量液位、排水时控制流量——创建控制策略和操作画面。包括6个部分: 第3章,学习DeltaV浏览器,关于如何打开浏览器并使用导航功能进行查找。 第4章,学习创建和下载控制策略,介绍如何一步步创建水箱系统控制所需的4个模块,和用于定义水箱开关时序的时序功能图。 第5章,创建操作画面,学习DeltaV组态模式中的基本工具,以及如何用图片、面板、零件图、按钮、曲线图组成一个操作画面。 第6章,使用DeltaV运行模式,介绍如何在操作站的观察点上使用操作画面、修改参数、确认报警,以及进行其他设置。 第7章,采集和显示数据,学习如何用DeltaV工具和表格载入功能收集和显示现场设备的实时数据。 第8章,配置网络、装载和分配用户权限、设置帐户。一步步学习配置工作站、控制器和I/O点。 2.2例子:水箱系统 右图是一个假定的水箱控制系统,可以在排水时控制流 量,作为练习,在下文中,将为它创建一个控制策略和时 序。 2.2.1 控制模块 首先要做的,是为上图中的控制回路创建4个模块。椭 圆形的标注(LI-101、MTR-101等等),是给4个控制模 块取的名字。 LT-1、FT-1、XI-1等等,是位号(Device Tags),用来 标记变送器、阀,或其它I/O设备。 表2-1详细列出了所有的模块和I/O位号,这些在下文都将用到。 位号作为I/O组态的一部分,用于I/O卡通道,详见第8章。 2.2.2 时序功能图(SFC)

相关主题
相关文档
最新文档