晓鸥 的个人资料Single Running照片日志列表 工具 帮助

Single Running

陈 晓鸥

兴趣
http://xiaoou22.photo.163.com
ttp://picasaweb.google.com/xiaoou22
第 1 张,共 235 张
9月21日

关系子项的处理

一个类/表/实体,一定会对应若干相关关系项目。

比如:订单和订单物料行,这里就存在一个关系,订单和物料列表之间的关系。

事实上,经常会出现类似的需求。

image

一艘船舶,在海事管理中,通常有很多单据,记录与之相关。而这些相关的信息,都是在元知识中已经设定了关系的。

我们通过的元知识的关系解析,了解到船舶这个信息实体,对应有多少个其他实体与之有关系,一艘船舶又可以获得多少的相关信息。

通过在主界面中,增加一个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之间的不兼容;

--------

需要全面的界面重新布局和设计,派生出各个类,以更加有效的下一步工作。

9月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版本。

9月2日

嵌套panel中遇到的妖问题

今天终于搞清楚了Ext中panel嵌套遇到的问题。

以前在border布局后,无法add一个query form,原因是我采用的form.id = code + ‘_query’,现在发现,Ext目前对’_’的解析有问题,如果我修改成form.id = code + ‘-query’,问题马上解决。

8月26日

为grid增加分页comboBox

grid的分页已经完成了,那么分页的选择也需要提供。

首先定义了一个comboBox,然后为这个comboBox加载固定的store,就是基本的“10,20,30,50,100”

估计是应该满足日常用户的需要了吧。

然后根据用户选择的结果,更新grid的分页。

一开始还以为pageToolBar的pageSize属性是只读的,经过尝试以及在网络上查找信息,才知道是读写的,是public的属性。Ext有时候API写的太简单了。

--------------------------------------------------------

然后就简单了,通过监听comboBox的select事件,进行修改grid的bbar中的pageSize属性,同时修改load中的参数,这样就可以确保没有问题啦。

当然还没有具体测试,可能还有小问题。

image

然后选择20页,就可以看到grid的pagetoolbar的相关信息也会改变。

image

可以看到页数从3变成2了。挺好的,只是翻页还没有测试。

------------------------------------------------------------------------------------

8月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,我终于测试通过了算法改变后的结果。

image

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的image ,使用这个属性,进行一下编辑就可以在load的时候,从remote端返回需要的数据啦。

--------------------

由于以前已经把grid进行了个性化派生,因此现在就很简单,只需要增加一个方法,返回当前form中的数据,进行对象化,然后返回即可。image

然后就是定义store的事件:

image

于是就可以达到如下效果:image

 

 

------------------------------------------------------------------------------

通过测试,基本可以使用,每次都会提交查询条件。

ASP端也进行了相关改造,适应分页。

由于实际调查发现,用户并不喜欢或者没有意识到每次查询后都填写分页的页大小。

因此打算取消query中的页大小textField,而在grid中进行改造,让pageToolBar可以修改页大小。这样才是合理或者更加简单的做法。

因此用户不喜欢,也不理解页大小的概念,还不如默认多少,然后有层次的用户可以在grid中进行修改实际显示的页大小。image,这个是163邮箱的功能菜单,可以看到,通过菜单可以调节grid中的分页大小。而不是在查询邮件的时候要求用户去填写。

因为form中经常或者必须的才需要,否则就不应该安排在form中,减少form的item数,其实就是让用户有更加简洁,容易操作的视觉感官。

 

 

 

 

 

8月13日

grid改进2

越来越进入状态了,我感觉很好。在grid上增加了删除功能,以及提供了刷新数据的功能。

image 点击新建按钮,弹出含有content form的win进行操作。

image 输入一些内容,必填的有提示

保存后,我们去查询一下数据吧。

image

image 点击查询,应该可以把在C51格子的船舶都查询出来。

image 结果查询出2条记录符合条件。

在grid中,罗列出来。image

选择一行,也就是我们刚才输入的,再点击删除。

提交到asp端,通过pk value的传递,可以进行删除数据的操作。一句简单的sql 语句就可以完成。

---------------------------------------------------------------------------------------------------

现在需要对form中的数据进行删除工作。自然,相对来说简单多了。

只需要再次传递pk value值就可以实现。

由于自己派生了一个form,因此有一个自主属性pkField,因此获得pk value变的很容易啦。

-----------------------------------------------------------------------------------------------------

最后,在ajax响应之后,通过判断,如果确认成功,那么需要刷新grid数据,以及关闭content form。

修正grid的选择模式

本来最初的设计中,采用简单的rowSelect模式,也就是说,选择一行,就是一行。

今天重新下一步开发delete的过程中,参考一些案例,发现还是使用checkBoxSelectionModel更合适一些。

效果:image,这样的话,简单的select all或者deselect all就变的很简单。只需要使用Ext的基本控件就可以满足基本需求。

imageimage

 

------------------------------------------------------------------

同时修改event:rowdbClick,当一行数据被选择后,如果是双击,那么弹出content form 界面,form嵌入到一个web Windows中。image

通过简单的设计,就可以轻松获得当前行所在的record,通过的数据record的load,那么form就可以轻松加载数据啦。这个网络上有很多案例可以参考。

--------------------------------------------------------------------

为了给删除工作准备,首先搞定grid中的topBar,增加一些选择相关的按钮,这些按钮可以对数据行进行选择的操作,基本来说需要:[全选,取消选择,反向选择,查看选择记录的详细内容,删除选择的数据]

全选和取消选择都比较简单处理,直接使用selectionMedol中的方法:selectAll和clearSelections.

反向选择就比较搞,不过也不难,就是分部走

先全选,然后根据选择的行,一次取消选择即可。image

至于这样的效率如何,我就不敢说了,目前还没有进行数据测试,功能实现是第一目标。

另外还需要对数据进行分页处理,毕竟Web上还是需要效率的,不像C/S上那样,所有数据全部堆出来,也问题不大。

查看功能比较简单,直接获得当前selectedRow的record对象,然后调用contentForm就可以啦。

----------------------------------------------------------------------

接下来就是搞删除功能了。

获得选择的数据,然后提交ID_array,应该可以轻松的进行删除工作。