随笔分类 - 我的ExtFrame框架
使用ExtJS2.2,MVC2.0构造的一个开发框架
摘要:CRUD的最后一部分了详细信息页面可以通过两种方法显示:弹出对话框或直接在主区域显示弹出的话,其实可以采用和编辑页面相同的模式编写,无非就是不能编辑而已(甚至很多传统系统都是直接采用同一个Form编写的)这里介绍的呢,是稍微复杂点的模式,就是详细信息不光包含了数据本身,还会包含一系列的相关信息,例如:销售机会的详细信息页面,不光包含了一条销售信息自身的数据,还包含了很多的相关附加信息,例如,该销售对象的联系人,竞争对手资料,联系记录,拜访记录,进度等等人事档案的详细信息页面,会包含该人在学校学习的历史,在其他单位的工作历史,在公司的奖惩记录,合同鉴定记录,工资变更记录等等ExtFrame里的详
阅读全文
摘要:查询页面时进入一个模块的主界面查询页面一般由三部分组成:操作栏工具条、查询参数窗口、查询结果列表其实查询功能已基本在Grid封装章描述清楚了,这里就简单些操作栏工具条和新增、修改界面没什么不同,在panel第一次显示时通过CommandButtonBuilder创建就可以了查询参数窗口采用FormPanel构造,这样在GridPanel的read方法里可以直接调用FormPanel.getValues()方法获取参数,也可以不使用查询的GridPanel使用QueryGrid(或其它封装),只需要声明grid的名字就可以自动加载格式和数据以角色的查询页面为例,总计代码如下: 1 var rol
阅读全文
摘要:这个真的是简单到极点了在Grid的列操作里配置删除功能就可以了角色的删除配置是这样的 <Command label="删除" image="icon-delete" command="rolegrid.doDelete('{id}');" />因为doDelete方法本身会刷新Grid,所以无需再在回调方法里刷新了(但是仍然支持回调方法)角色的IOC的DataHandler对象重载了默认的DataHandler的删除方法,在删除时引发了一个系统事件
阅读全文
摘要:参考数据新增编程,修改编程也同样的简单,重点仍然是在修改界面的控件排布上新增角色界面的窗口为window_add_role,修改角色界面的窗口命名为window_edit_role和window_add_role不同的是,window_edit_role在显示后需要加载指定ID的角色的数据,所以不能直接调用show方法打开window_edit_role的方法是调用封装的方法,即显示了窗口,又调用了窗口的FormPanel的load方法加载数据,还需要传入角色的ID作为参数编辑按钮的Command封装是这样的 <Command label="编辑" image=&qu
阅读全文
摘要:本章介绍ExtFrame是如何编写数据的CRUD功能里的新增项的,本章以角色为例首先,新增项一般是个弹出的对话框界面,采用Ext.Window套Ext.FormPanel界面显示出新增的界面的代码一般是在该类数据的查询页面里(按钮条上有新增和查询两个选项)对角色查询里的按钮条一般做如下封装: <CommandList name="rolepanel" moniker="Role" description="角色查询"> <Command label="添加" image="icon-ad
阅读全文
摘要:ExtJS里的Grid是UI控件的一个亮点,但是用起来比较麻烦,要编写太多的配置项,创建Grid的地方往往代码很长很长在设计框架时,就考虑了以下几点:1、Grid要封装的尽可能的简单,创建Grid代码要简单(最关键的是要降低脚本代码量,提高脚本的可读性与维护性)2、Grid项变更时要尽量简单3、Grid扩展列显示样式时也要尽量简单些4、要能配合Command模式的操作(支持在配置文件里刷新)5、要支持Command列最后就做了这么两个东西出来:QueryGridQueryAllGrid两者的区别是QueryAllGrid不带分页功能后来又在这两个基础上继续继承了其他的Grid,例如带自动连接查
阅读全文
摘要:被这个问题困扰了相当一段时间系统启动后在IE下基本正常,在FF下多刷新几次,就会出现数据库连接的稀奇古怪的现象先是执行DataAdaper.Fill命令后,出现DataSet.Tables[0]不存在的错误继续执行,出现执行SQL操作报告数据库连接致命错误再继续执行,不报错了,但是每次数据库查询返回的结果都不太怎么正常一直怀疑是使用了系统Cache机制的原因,但想不通为什么IE就没问题出现这个原因,是因为系统的很多逻辑被打散在各个IOC对象之间,如果这些逻辑全部自己创建数据库连接,则第一个会造成数据库连接过多,(例如一颗树的访问,有可能调用一个权限判定逻辑很多次,如果自己创建连接,则每访问一次
阅读全文
摘要:本章介绍框架里的IOC机制及另一个核心设计模式:TemplateMethodTemplateMethod模式就是所谓的模版了,刚开始跟别人介绍说用这个模式时,很多人说你做的是CMS么,我去看了下CMS的介绍,应该是两回事吧我这里使用这个模式不是提供模版给网站,而是提供处理业务逻辑的模版给开发人员简单的说,就是系统的大多数逻辑,我都做了个模版给你,你能用就用,不能用的话久继承扩展,只修改需要改的地方所谓的TemplateMethod模式,本身就是OOP的继承与重载的一个实现从架构来说,就是有一类功能(例如数据的保存),定义成一个接口,然后为这个接口实现一个通用类,这样,系统的大多数这类的逻辑就可
阅读全文
摘要:其实这个框架里用到的模式很多,例如持久层创建数据库连接使用的Factory,而我最喜欢用的是Singleton,例如配置文件处理类,逻辑Handler类等大多都采用了延迟加载的Singleton模式,不过这些都不是这个框架设计的核心模式当初设计这个框架时就确定了两大核心模式:Command和TemplateMethod,另有一个配合的是使用IOC机制加载对象处理器,这个应该不算设计模式了本篇就重点介绍框架里是为何以Command为主以及如何应用Command模式设计整个架构的说起来,这个要起源于以前做的一个C/S的项目,那个项目里大量采用了Command模式并且应用到了树上,也就是当用户点..
阅读全文
摘要:这个架构么,特点还是很突出的,缺点么,这个......首先,这个架构把B/S编程几乎完全变成了界面编程----前台开发人员几乎不需要写特殊的Javascript代码,基本上都是在编写诸如新增、编辑、详细信息之类的界面(全部是ExtJS的Form之类的东西),另外,还要进行一堆配置(这个缺点是比较复杂了些),分层很清晰,不会出现一个逻辑要写一大堆脚本,再写一大堆后台方法这种情况核心脚本的结构异常清晰,不会出现一层一层的套用(可以看看树的代码是怎么写的),我痛恨那种为了实现一个业务逻辑,new 一个button,然后在click事件里来一个new Ajax.Request,然后在success方法
阅读全文
摘要:这个工作流其实是个比较简化的版本了,因为没人帮我做图示化的设计器:-(在我大致搞出来后意识到,其实如果有图示化设计器,可以很容易的搞定图示版本引擎,只是偶实在是不会做SilverLight,又调不到人手(光杆司令,郁闷)项目又要马上投入使用,只能上比较简单而又比较死的节点定义了,也就是从节点1只能提交到节点2,2只能提交到3这样的流程这个工作流的设计和我过去在另一个比较大的项目(比较早了,还是CS版本的)写的引擎不太一样,设计机制就完全不一样,那个引擎完全是独立运转的,也就是用户拖拖拽拽定义下流程就行了,而这个引擎,是需要实施人员(其实应该是开发人员,实施人员根本搞不定)对每个流程进行配置,虽
阅读全文
摘要:嗯,先上图然后是代码,这个么,这个框架只能给出JS代码,后台代码考虑到公司版权问题不敢乱放,只能描述下了JS代码就一行:var maintree = new AutomationTree({ name: 'navigator', rootVisible: false });指定创建一个名称为navigator的AutomationTree(名字俗了些,谁有好名字给个建议?)重点在AutomationTree的封装上了,其实也很简单,甚至就两个方法100行代码:View Code 1 function AutomationTree(config) { 2 this.name =
阅读全文
摘要:这个框架从去年下半年开始做,到现在已基本搭建完成,已提交给一个项目组正在进行第一个项目的编写(边写边改)其实前身大概是从前年年初开始的,不过那次因为某些原因未能写完,而且也未能达到效果,去年呢仔细看了ExtJS,发现这个东西好,可以完美的达到我想要的效果(DAMN Ext2.2的BUG,一堆莫名其妙的问题),其实以前有几个项目只是拿ExtJS做了部分页面的美化工作,因为我其实不擅长也不喜欢写脚本,所以一开始并没有想到用ExtJS,只是那些项目的脚本之难读,另我实在难以忍受,而去年看了某同事带来的Java的基于ExtJS的效果,忽悠感触,这东西可以实现我想的模式,结果用Java做了半年,最后P都
阅读全文