| 晓鸥's profileSingle RunningPhotosBlogLists | Help |
Single Running |
||||
|
September 21 关系子项的处理一个类/表/实体,一定会对应若干相关关系项目。 比如:订单和订单物料行,这里就存在一个关系,订单和物料列表之间的关系。 事实上,经常会出现类似的需求。 一艘船舶,在海事管理中,通常有很多单据,记录与之相关。而这些相关的信息,都是在元知识中已经设定了关系的。 我们通过的元知识的关系解析,了解到船舶这个信息实体,对应有多少个其他实体与之有关系,一艘船舶又可以获得多少的相关信息。 通过在主界面中,增加一个TabPanel的方式,将相关信息进行展示。 1、需要获取元知识中关系对象列表,我通过编写asp代码,很方便的获得了元知识关系列表 2、客户端,进行对元知识的解析,通过一个for循环,依次生成grid,在这个工作之前,extend一个grid类,专门用于处理我们as matrix对应的grid,输入元知识对象code,即可生成对应的grid对象。通过对as_grid的处理。 3、编写listener,针对各类操作进行数据的load。grid.getStore().load({params:{…}}),这个方法的需求,需要我们输入一个keyValue进行数据过滤,保证grid中的数据一定是更当前main中选择的数据对象相关。 ==================================================== 问题: 1、派生的各个类尚不够强大,需要精细化工作; 2、各个界面元素之间有相关影响,应该进行完整的界面规划,消除各个element之间的不兼容; -------- 需要全面的界面重新布局和设计,派生出各个类,以更加有效的下一步工作。 September 11 找出App_Func模块不能被载入数据问题对Web2.0中关于grid改造之后,发现大部分的类都可以顺利加载数据,就是一个不行。 很奇怪,我找了半天,也没有发现问题在哪里。经过思考,基本排除了客户端的问题,于是就是服务端的情况啦。 可惜,我发现服务端同样返回数据,可为什么没有反应呢。 在store.load中添加了listener,结果发现,每次当遇到几个数据行被response之后,load就是没有执行。 在详细查看了网上的高手文章:http://javahappy.blog.hexun.com/33514736_d.html 发现,可能是response的JSON格式不对,于是我通过firebug获得的response数据,复制到http://www.jslint.com/ 进行检查,终于发现,原来是note字段中,存在回车字符,而在asp端根本没有做任何的处理,导致的结果就是response的字符串直接被回车掉了,于是不符合JSON规范。 后来的解决方法就是在asp中增加对回车等各类特殊字符的转义方法,后面就顺其自然了。 不过通过这次事情,再次发现编码过程中,程序必须有针对exception的代码,以及是发现错误。 现在,grid中增加了load exception的listener,以后再有数据load失败,就可以及时发现了。 这里要感谢高手liyanqing_01的博客中记录的分析方法,很受用。 然后还需要对java script代码进行全面的检查。尽可能进行派生工作,下一步也是重点,就是完成子项列表界面,即可完成初步的Web2.0版本。 September 02 嵌套panel中遇到的妖问题今天终于搞清楚了Ext中panel嵌套遇到的问题。 以前在border布局后,无法add一个query form,原因是我采用的form.id = code + ‘_query’,现在发现,Ext目前对’_’的解析有问题,如果我修改成form.id = code + ‘-query’,问题马上解决。 August 26 为grid增加分页comboBoxgrid的分页已经完成了,那么分页的选择也需要提供。 首先定义了一个comboBox,然后为这个comboBox加载固定的store,就是基本的“10,20,30,50,100” 估计是应该满足日常用户的需要了吧。 然后根据用户选择的结果,更新grid的分页。 一开始还以为pageToolBar的pageSize属性是只读的,经过尝试以及在网络上查找信息,才知道是读写的,是public的属性。Ext有时候API写的太简单了。 -------------------------------------------------------- 然后就简单了,通过监听comboBox的select事件,进行修改grid的bbar中的pageSize属性,同时修改load中的参数,这样就可以确保没有问题啦。 当然还没有具体测试,可能还有小问题。 然后选择20页,就可以看到grid的pagetoolbar的相关信息也会改变。 可以看到页数从3变成2了。挺好的,只是翻页还没有测试。 ------------------------------------------------------------------------------------ August 25 grid的分页处理网络上有很多的grid分页处理,我参考了很多。 基本上都是先取数,然后指定页大小。 分页的数据整理各有千秋,我最后还是决定在SQL server上分页,也就是说asp端传输一个sql语句,查询出分页的结果。 分页的算法很简单: select TOP @pageSize [fields list…] from @tabName where [conditions..] and ID not in (select TOP @pageSize*(@pageIndex-1) ID where [conditions…] order by ID) order by ID --------------------------------------------- 听说这个是效率很好的算法,很多人都是制作存储过程的。不过由于我们平台的特点,还是在ASP上制作可执行的sql语句更加实际。因为元知识提供了基本的select语句,只需要稍微的修正一下,就可以满足算法。 当然,测试算法是个很要命的过程,通过无数的response.write,我终于测试通过了算法改变后的结果。 response的大概结果就是这样啦,可以看到,实际上外键的足够丰富,会导致改写分页算法很郁闷的。 ---------------------------------------------------------------------------------- 这里需要一个特别注意的地方,Ext的pageToolbar中显示一共多少页,是通过response返回的JSON对象中,指定record count的结果。这个结果是在定义Ext store的时候,JSONreader分析出来的。由于pageToolbar是和store绑定的,因此可以肯定分页工具的很多参数是依靠store的。 因此,我不得不在服务器上多执行一次sql,为的就是不分页的情况下,能够select count(id)from tabName where….. 不过还好,效率低了,但是更加契合我们的平台才是重要的。 ------------------------------------------------------------------------------------ 然后就是通过pagetoolbar中post的参数:start,limit来进行分页的计算。 计算出pageSize=request("limit“),至于pageIndex也很简单,我每次都是初始start=0,因此只需要加法除法即可。善用asp的FIX()函数即可。
================================================ 最后,需要在store中添加一个监听,每次load之前,需要预先准备查询条件,否则在Ext下,pageToolBar只会post两个分页参数:start和limit,而先前查询条件就没有了。 这里需要用到store的 -------------------- 由于以前已经把grid进行了个性化派生,因此现在就很简单,只需要增加一个方法,返回当前form中的数据,进行对象化,然后返回即可。 然后就是定义store的事件:
------------------------------------------------------------------------------ 通过测试,基本可以使用,每次都会提交查询条件。 ASP端也进行了相关改造,适应分页。 由于实际调查发现,用户并不喜欢或者没有意识到每次查询后都填写分页的页大小。 因此打算取消query中的页大小textField,而在grid中进行改造,让pageToolBar可以修改页大小。这样才是合理或者更加简单的做法。 因此用户不喜欢,也不理解页大小的概念,还不如默认多少,然后有层次的用户可以在grid中进行修改实际显示的页大小。 因为form中经常或者必须的才需要,否则就不应该安排在form中,减少form的item数,其实就是让用户有更加简洁,容易操作的视觉感官。
August 13 grid改进2越来越进入状态了,我感觉很好。在grid上增加了删除功能,以及提供了刷新数据的功能。
保存后,我们去查询一下数据吧。 选择一行,也就是我们刚才输入的,再点击删除。 提交到asp端,通过pk value的传递,可以进行删除数据的操作。一句简单的sql 语句就可以完成。 --------------------------------------------------------------------------------------------------- 现在需要对form中的数据进行删除工作。自然,相对来说简单多了。 只需要再次传递pk value值就可以实现。 由于自己派生了一个form,因此有一个自主属性pkField,因此获得pk value变的很容易啦。 ----------------------------------------------------------------------------------------------------- 最后,在ajax响应之后,通过判断,如果确认成功,那么需要刷新grid数据,以及关闭content form。 修正grid的选择模式本来最初的设计中,采用简单的rowSelect模式,也就是说,选择一行,就是一行。 今天重新下一步开发delete的过程中,参考一些案例,发现还是使用checkBoxSelectionModel更合适一些。 效果:
------------------------------------------------------------------ 同时修改event:rowdbClick,当一行数据被选择后,如果是双击,那么弹出content form 界面,form嵌入到一个web Windows中。 通过简单的设计,就可以轻松获得当前行所在的record,通过的数据record的load,那么form就可以轻松加载数据啦。这个网络上有很多案例可以参考。 -------------------------------------------------------------------- 为了给删除工作准备,首先搞定grid中的topBar,增加一些选择相关的按钮,这些按钮可以对数据行进行选择的操作,基本来说需要:[全选,取消选择,反向选择,查看选择记录的详细内容,删除选择的数据] 全选和取消选择都比较简单处理,直接使用selectionMedol中的方法:selectAll和clearSelections. 反向选择就比较搞,不过也不难,就是分部走 至于这样的效率如何,我就不敢说了,目前还没有进行数据测试,功能实现是第一目标。 另外还需要对数据进行分页处理,毕竟Web上还是需要效率的,不像C/S上那样,所有数据全部堆出来,也问题不大。 查看功能比较简单,直接获得当前selectedRow的record对象,然后调用contentForm就可以啦。 ---------------------------------------------------------------------- 接下来就是搞删除功能了。 获得选择的数据,然后提交ID_array,应该可以轻松的进行删除工作。
|
|||
|
|