精通Grails: 使用Ajax实现多对多关系 - 编程入门网
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 数据更新字段
图 3 展示了两次成功执行 Ajax 调用之后 Flight 表单的外观: 图 3. 通过 Ajax 调用填充的表单 精通Grails: 使用Ajax实现多对多关系(8)时间:2011-08-02 IBM Scott Davis客户端验证 最后,还需要执行一些客户端验证,以确保 departureAirport 和 arrivalAirport 的无效值不会提 交回服务器(事实上,在为用户提供选择字段或一组复选框时,不可能输入无效值。由于我允许用户输入 任意格式的文本,所以我需要留意他们的输入质量)。 将 onSubmit 添加到 g:form 标记:
如果 validate 返回 true,则表单被提交到服务器。如果返回 false,则提交被取消。清单 17 展示 了 validate 函数: 清单 17. validate 函数
如果您觉得将选择字段转换为文本字段需要更多的工作,我同意您的观点。我没有执行这个更改以便 更容易操作 — 我努力使最终用户更容易操作。但是请注意:Grails 提供的搭建功能为我了做了很多初 始工作,我可以对各个部分进行一些调优。搭建功能并不意味着是全部完成。它只是避免了所有令人厌烦 的事情,您可以专注于更有趣的工作。 结束语 除了简单的多对多关系以外,希望您还能从本文了解一些创建多对多关系的出色技巧。有时候您希望 删除操作能够实现级联;有时候不希望这样。任何时候您认为两个类之间存在着简单的 m:m 关系时,可 能还需要从中发现第三个类。 在表示方面,选择字段是 m:m 关系的默认选择,但它们不是惟一的选择。如果选项很少,那么单选按 钮和复选框也是值得考虑的选择。如果选项很多,文本字段和 Ajax 能够很好地完成任务。 下个月将向您展示如何将这些航班添加到交互式 Google 地图上。我还会讨论 Grails 服务。尽情享 受精通 Grails 的乐趣吧。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |