锁定老帖子 主题:关于extjs开发的方式
精华帖 (4) :: 良好帖 (1) :: 新手帖 (8) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-13
用ext做开发也有2,3个月了,都是公司的人自己摸索的,现在我们的开发方式是一个模块一个js文件,这样导致的结果就是展现逻辑和一些业务逻辑(主要是和向后台发信息和收信息后的处理之类的)混在一起,一个js文件几千行,极难维护,有点像早期的model1纯jsp开发, 现在想的是能不能像model2一样,把所有的业务代码抽取成一个一个的方法放到一个js文件中,然后页面的代码放到另一个文件中,完全分开,但这样可能带来的一个可能的坏处是,有时业务代码是要访问上下文对象的,不知大家怎么看 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-10-13
你的系统一个模块肯定包括很多个Ext控件,可以把控件独立成多个js开发,然后用一个总的JS调用,可以看一下Ext3.0的writer例子,如果系统比较庞大,可以考虑结合单页系统开发,动态加载js,不用每个页面加载一次Ext包。
|
|
返回顶楼 | |
发表时间:2009-10-13
我用EXT将近1年半了,我觉得EXT也可以类似JAVA一样的开发方式,每一个JS文件一个类,一个对象,
然后需要调用的时候,new 一下!!,我在开发中就是这么做的。。。 |
|
返回顶楼 | |
发表时间:2009-10-13
<script type="text/javascript" src="ext的js"></script> <script type="text/javascript" src="common.js"></script> <script type="text/javascript" src="module_1.js"></script> ... <script type="text/javascript" src="module_x.js"></script> <script type="text/javascript"> Ext.onReady(function(){ // 不同的模块定义在不同的js中 var module_1 = functionInModule_1(); .... }); </script> |
|
返回顶楼 | |
发表时间:2009-10-13
分成模块的话 假如个个模块间有交互呢,
我点击这个树的过程中,那个grid也要动态刷新,那么我就要去操作那个grid的ds,如何获得呢,ext.getCmp('xx'),那么这个代码就写死了 更普遍的说 很多情况下实现都是紧耦合,我认为模块化最主要是为了复用 |
|
返回顶楼 | |
发表时间:2009-10-13
现在正在上班,晚上好好的回你一贴,我做EXTJS一年多了.
|
|
返回顶楼 | |
发表时间:2009-10-13
那就用GWT吧
|
|
返回顶楼 | |
发表时间:2009-10-13
最后修改:2009-10-15
我觉得,开发EXTJS,首先要建立的就是组件化编程,你把一个form作为一个组件,也可以将半个页面都作为一个组件.当组件化编程之后你就要考虑分类别,分模块开发了,
我认为,一个组件一个JS文件,多个组件拼接成一个模块,这些组件都放在一个文件夹下,命名方法其实很简单,类似java如: 在App文件夹下的Scene文件夹内 App.Scene.ScreenManager.js Ext.namespace("App.Scene.ScreenManager.XX","App.Scene.ScreenManager.YY"); App.Scene.ScreenControl.js Ext.namespace("App.Scene. ScreenControl.XX","App.Scene. ScreenControl.YY"); App.Scene.Main.js Ext.namespace("App.Scene. Main.XX","App.Scene.Main.YY"); 在App文件夹下的Business文件夹内 App.Business.CheckUser.js //同上 App.Business.Logout.js //同上 并且,切记,要把Extjs当做java来写,因此,你的程序只能有一个入口即只能允许整个程序中只出现一个 Ext.onReady(function(){ }); 很多人不信Extjs可以这样写,说只能应用在小型的项目中,但是我可以告诉你,这样的写法完全适用与大项目,而且是项目越大越能展现出他的好处 我经历过刻骨铭心的失败总结出以下几点经验: 1.绝不使用全局变量(如有必要,可以用静态方法来做) 2.不能设置组件的(包括该组件下的小组件的)ID这个属性,(此组件的派生类你可以随意). 3.稀奇古怪的代码少写,因为你不能保证你的EXTJS版本永远停留在当前版本上(如果公司有钱买授权的话) 4.能在后台完成的业务逻辑坚决不在前台做,即使在前台做看起来比较简单(如果前台坐起来非常简单就算了,例如验证) 5.统一管理你的JSON生成. 6.规范你的代码 我下面有一段代码是我的风格,当然可能并不适合你: Ext.ns("App.Users.CURD"); /** * 必要的注释一个不能少,Javascript代码维护起来没有java好维护.... * */ App.Users.CURD = Ext.extend(Ext.Panel,{ //属性代码全部写在这里 title:"CURD", //初始化组件(如果你的组件需要改变样式或者需要动它的dom,你可以重写父类的onRender,并把部分视图代码放在onRender函数中) initComponent:function(){ App.Users.CURD.superclass.initComponent.call(this,arguments); //先定义自定义事件(如果必要的话) //接着视图代码全部写在这里 }, //方法函数全部写在这里 //先将与后台数据交互的函数写出来 addUser : function() { //对应后台同名的Action方法函数 }, delUser : function() { //对应后台同名的Action方法函数 }, updateUser : function() { //对应后台同名的Action方法函数 }, //供自己内部使用的函数跟在后面 formClear : function() { }, //提供给外部调用的函数紧跟数据操作 getSelectUsers : function(){ return ...... } setXXXX : function() { }, //最后就是事件处理函数,因为函数比较多,事件处理往往伴随着页面逻辑,放在后面比较好找....混在中间不太好找 onSubmit : function() { }, onDelet : function() { } }); //*因为是基于UI的组件,因此一般都可以独立测试,测试通过后注释掉即可(注意我的注释写法) Ext.onReady(function(){ //......... }); //*/ 最后一句....无论是ASP.NET组件(Coolite)还是什么可视化组件,前期学习都不要使用. |
|
返回顶楼 | |
发表时间:2009-10-13
模块间有交互 紧耦合,你是怎么解决的
不能设置组件的(包括该组件下的小组件的)ID这个属性 why |
|
返回顶楼 | |
发表时间:2009-10-13
因为你现在只有一个页面,当页面中保留有这个对象的引用,这个对象就不会给GC回收,你的组件可以公开一些函数供外部调用.这是一个办法.
还有一个办法就是代理数据,你可以把需要交互的数据放在一个全局的函数中.函数维护一个数组. |
|
返回顶楼 | |