我有一个处理域模型编辑的表单(A)。此域模型还hasMany
其他域模型(B)。所以为了向A添加新的B,我想实现一个自定义的AJAX函数,它将一些输入字段的参数发送给控制器。
为此,我创建了以下GSP:
<g:form>
<!-- other stuff concerning entity A -->
<p>Add B to A</p>
<input type="text" id="bName" /> <input type="text" id="bSomeProperty" <a href="#" id="addB">Add</a>
</g:form>
并将以下Javascript添加到main.js
插件加载的resources
。
$("#addB").click(function() {
$.ajax({
url: '', // controller: a, action: addB
dataType: 'json',
data: {
bName: $('#bName').val(),
bSomeProperty: $('#bSomeProperty').val(),
}
});
});
所以,问题是:如何检索指向当前控制器和操作addB
的URL?如果可能的话,我不想硬编码或使用相对路径 - 因为Grails实际上提供了一些方法来检索链接。
在Javascript中使用remoteFunction
对我来说不起作用,因为我使用jQuery。两者似乎都不能很好地协同工作。
我还发现了这篇关于Grails,jQuery和AJAX的博客文章(http://alexduan.com/2011/02/17/grails-jquery-and-ajax/)。他在javascript部分中使用了一个变量。遗憾的是,contextPath
变量未被解析,因为Javascript不在GSP页面内,而是在外部文件中。
我该怎么办?
选项:
g:javascript
标记内(有些难看,因为它有些内联)remoteFunction
工作(如何使用jQuery?)答案 0 :(得分:0)
我在我的项目中使用你的第一个选项:我在全局myapp.urls javascript对象中加载我所有映射的子集,这样
myapp.urls['mappingName'] = url
出现2个问题:
您必须选择要公开的网址,因为它们已公开
网页抓取(例如GoogleBot)将遵循这些链接,如果您没有为此制作robots.txt。
所以为了增强这个解决方案,我对内联调用进行了base64编码,所以我得到了这样的东西:
myapp.urls=eval(base64_decode('gYW55IGNhcm5hbCBwbGVhc3VyZS4=='));
它不完美但它有效。