本来是计划让团队内的同事一起总结使用qooxdoo的使用经验和困难,然后写些关于使用qooxdoo的总结供大家参考,但因为项目的原因到现在也没有时间办这件事情,所以打算还是零零碎碎的写一点是一点,乱就乱了,今后再整理。另外最近发现其实国内还是有不少人关注和使用qooxdoo的,所以立马写下这个帖子抛砖引玉。
1、qooxdoo基本信息 qooxdoo带有XHR的封装,但其主要的还是WEB UI,提供了类似桌面程序的窗口小部件。
http://www.blogjava.net/ynstudio/archive/2006/07/23/59648.html 从上面的链接可以看到我们开发的一个项目中的几个截图,也可以到其官方网看其demo。
官方网站
http://qooxdoo.org/ ,在官方网站上可以看到其下载地址,有两个文件,一个是src一个是build,所谓build就是把所有的src里的js文件都合并到一个js文件里,排成一行,去除注释,从而缩小体积,但也有700多K。
http://www.nabble.com/Javascript-f15545.html 是一个关于几个javascript应用的论坛,其中就有qooxdoo的,你可以从这里了解其动态,参与相关的讨论。
2、RPC 如果使用qooxdoo,而不使用XHR,那么页面就需要刷新,这个是麻烦的。我们本来是使用的DWR,现在使用的是经自己改造的JSON-RPC-JAVA。现在java里似乎主要就是这两个。其他语言的话,如.net,perl,php都有json-rpc的实现。使用了类似JSON-RPC-JAVA和dwr这样的技术,开发模式就类似一般的C/S开发了,当然困难还是有的。
3、我们使用qooxdoo遇到的一些困难 A、首先是界面的开发,虽然类似C/S的开发方式了,不再存在页面刷新带来的烦恼,思考问题更加直接,不需考虑参数传来传去,不需学习一堆的标签,特别是对于刚接触WEB开发的程序员,接受起来更加容易。但是界面都是使用代码来构建的,而javascript也没有很好的编辑工具。所以刚开始开发时还是满痛苦的。后来有了些改观,1、规范代码结构,界面代码,事件响应代码,公用函数,归类摆放;2、选择更好的编辑工具,如JSEclipse,aptana等;3、使用调试工具,我认为firefox的firebug是最好的;4、尽量把逻辑放在java里,降低界面javascript的复杂度。另外今后我们将推广QxBuilder的使用。
B、layout的使用。对于我们这些开发人员,习惯使用table来进行布局,在qooxdoo里只有QxGridLayout最象,但不好使用。我们开发了一些辅助方法来降低其使用难度。
C、没有类似HTML里的Form。使用qooxdoo加RPC其实不存在,HTML中的Form+submit的方式,但直接对fieldtext等进行操作,感觉不如form方便,所以我们开发了一个FormManager来进行辅助。
D、中文资料少,或者说基本上没有,有的只是些转来转去的没用的文字。
E、效率问题,起初为了方便开发,主页面和其他页面之间都是用QxNativeWindow的方式,即window.open,但由于IE的问题,以及qooxdoo 700k 的代码,导致每打开然后关闭一个新窗口,内存以6~10M的速度递增。这个问题的解决有两个方案,一个是不允许同时打开两个窗口,所有的页面都在一个iframe里切换,另外就是在主页面里使用QxWindow,但一个使用不方便,一个开发不方便。
4、排序的问题 这个是福星高照兄发现的,原文如下
qooxdoo默认用的是sort方法,这个方法的排序是按照字符集的顺序来的
关于中文排序问题,可以修改QxCompare.js,把QxCompare.byString的方法改了,倒是很简单,改成return a.localeCompare(b);
localeCompare()使用本地特定的顺序来比较两个字符串,语法如下:
string.localeCompare(target)
参数target是要与string进行比较的字符串。
如果string小于target,则localeCompare()返回小于0的数;
如果string大于target,返回大于0的数;
如果不愿意改QxCompare.byString,那么添加一个compare对象也成。
本来我以为是我用的是utf-8导致排序按照utf-8里的汉字排序,但我测试发现,即便是纯的GBK页面,Array的sort方法也不是按照字母顺序进行排序的。这个福星高照兄也提到了。