GRAILS AJAX

来源:互联网 发布:js创建类和对象 编辑:程序博客网 时间:2024/06/03 05:07
此文来转砸,非本人所写,原文地址:http://belmount.iteye.com/blog/165737

一个生于2005年以后的网站,如果没有AJAX的元素在里面,只能说这个站点已经out了。作为一个在AJAX大行其道的年代里诞生的快速开发框架,GRAILS对AJAX应用开发的支持那是相当的到位。至少,在我看来,除了updater有时候跳到其它地方去,其他的简直是完美。 


首先,GRAILS定义了一系列的tags从而使AJAX应用变得简单。这些AJAX相关的Tag,名称中都包含有remote这个单词。他们包括:formRemote,remoteField,remoteFunction,remoteLink。GRAILS默认在main.gsp里加载了prototype的js库,因此只要我们新作的gsp文件使用的是main的layout,这些tag就都可以放心的使用。否则的话,就会在加载的时候出现javascript错误。从实践上而言,我很喜欢formRemote这个tag,因为象查询这种操作用formRemote就可以简单的实现。但是,实践中也经常发现在页面没有任何javascript错误,remote调用成功的情况下,页面不按照预期去更新指定的div,而是按照默认的form post处理那样进行页面跳转。有时候更改了div的id就可以解决,有时候进行多次页面刷新也可以解决。不过,这样的体验不论如何都是会让开发人员抓狂的。所以,个人认为还不如直接用jquery的库手写来得稳当。也不需要几行代码。如果实在觉得麻烦就自己定义一个tag。(由于GRAILS的自定义tag实在是太好写了,我们的一个开发人员没事就问我是不是应该加个tag,真是勤奋的让我感动 。) 
从服务器端的AJAX响应的编写来看,最重要的就是render和template两个东西。由于我们荣幸的生活在一个文字很有艺术感的国度里,也就造成在电脑上作相同的事情必须付出比其他一些只会用字母拼字的民族更多的努力。GRAILS在flash对象里面存放中文消息默认的是可以用UTF-8正常表示的,但是如果用render直接输出中文消息,则必须下面这段代码通过转换,否则将会是乱码。
render(text:"中文",contentType:'text/plaintext',encoding:"UTF-8") 
这样就能够将简单的消息显示到客户端。 
但是对于像查询结果这样的复杂的列表,怎么作才能更简单呢。一种做法是将结果以xml或者json的格式存放,然后返回给客户端。客户端的js再根据返回的数据将结果用js的一些UI widget表现出来。这个代码量说多不多,说少不少,反正我是不想写的。我觉得最好用的一种方法就是用template,改动一下命令行生成的list.gsp就可以用来充当查询结果的template。如果我们稍微放弃一下拷贝粘贴,把template共用起来,这样还能真正的实现DRY,何乐而不为。(注:关于template的使用,请参照有关文档,这里不再多说。需要注意的是,在template出错的时候,错误源gsp的名称格式是${controllername}__${templatename}。这里用的是groovy语法,请注意连接两个名称的是两个_。)  

原创粉丝点击