快速业务通道

精通Grails: 使用Ajax实现多对多关系 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
portField){    var baseUrl = "${createLink(controller:''airport'', action:''getJson'')}"    var url = baseUrl + "?iata=" + $F(airportField + "Iata")    new Ajax.Request(url, {     method: ''get'',     asynchronous: true,     onSuccess: function(req) {update(req.responseText, airportField)}    })   }   ... </script>

update 函数读取 JSON 调用的结果,更新 <div> 的显示,并将隐藏字段的值更改为机场的主 键(如果找到的话),或者更改为 -1(如果未找到主键)。清单 16 展示了 update 函数:

清单 16. 使用 JSON 数据更新字段

function update(json, airportField){   var airport = eval( "(" + json + ")" )   var output = $(airportField + "Text")   output.innerHTML = airport.iata + " - " + airport.name   var hiddenField = $(airportField + ".id")   airport.id == null ? hiddenField.value = -1 : hiddenField.value = airport.id }

图 3 展示了两次成功执行 Ajax 调用之后 Flight 表单的外观:

图 3. 通过 Ajax 调用填充的表单

精通Grails: 使用Ajax实现多对多关系 - 编程入门网

精通Grails: 使用Ajax实现多对多关系(8)

时间:2011-08-02 IBM Scott Davis

客户端验证

最后,还需要执行一些客户端验证,以确保 departureAirport 和 arrivalAirport 的无效值不会提 交回服务器(事实上,在为用户提供选择字段或一组复选框时,不可能输入无效值。由于我允许用户输入 任意格式的文本,所以我需要留意他们的输入质量)。

将 onSubmit 添加到 g:form 标记:

<g:form action="save" method="post" onsubmit="return validate()" >

如果 validate 返回 true,则表单被提交到服务器。如果返回 false,则提交被取消。清单 17 展示 了 validate 函数:

清单 17. validate 函数

function validate(){   if( $F("departureAirport.id") == -1 ){    alert("Please supply a valid Departure Airport")    return false   }   if( $F("arrivalAirport.id") == -1 ){    alert("Please supply a valid Arrival Airport")    return false   }   return true }

如果您觉得将选择字段转换为文本字段需要更多的工作,我同意您的观点。我没有执行这个更改以便 更容易操作 — 我努力使最终用户更容易操作。但是请注意:Grails 提供的搭建功能为我了做了很多初 始工作,我可以对各个部分进行一些调优。搭建功能并不意味着是全部完成。它只是避免了所有令人厌烦 的事情,您可以专注于更有趣的工作。

结束语

除了简单的多对多关系以外,希望您还能从本文了解一些创建多对多关系的出色技巧。有时候您希望 删除操作能够实现级联;有时候不希望这样。任何时候您认为两个类之间存在着简单的 m:m 关系时,可 能还需要从中发现第三个类。

在表示方面,选择字段是 m:m 关系的默认选择,但它们不是惟一的选择。如果选项很少,那么单选按 钮和复选框也是值得考虑的选择。如果选项很多,文本字段和 Ajax 能够很好地完成任务。

下个月将向您展示如何将这些航班添加到交互式 Google 地图上。我还会讨论 Grails 服务。尽情享 受精通 Grails 的乐趣吧。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号