我有一个在html页面中使用<g:each>
显示的集合,在div中,例如,class =&#34; class1&#34;。
如果在控制器中获取并传递到session.someVariableName中的html页面,则集合的内容。
我需要每隔10秒更新一次这个div。
我如何实现类似的东西?
我有一个正常工作的jquery脚本,如下所示:
$(document).ready(
function() {
setInterval(function() {
$('.class1').toggle();
}, 10000);
});
它每10秒正确切换所需div的可见性。
我了解到要更新我必须使用函数.load()。但是我如何实现这个特定的功能呢?我到处搜索,找不到与我的问题相关的东西。
我是否需要实现一个额外的控制器来生成只包含所需div的视图并将.load()函数指向此视图?
答案 0 :(得分:0)
不确定这是否有帮助,你的问题不是那么清楚 - 你可以运行一个jquery get来更新div的输出,而不是.html你也可以使用.append(附加到内容。
$(document).ready(
function() {
setInterval(function() {
$.get("/"+baseapp+"/controller/action?id="+id+"&two="+two,function(data){
$('.class1').html(data).fadeIn('slow');
});
}, 10000);
});
使用ajax / websockets查看jssh插件,为你的q做类似的事情。
答案 1 :(得分:0)
我已经解决了这个问题!在freenode的#grails的joshm76的帮助下。
有几个步骤可以解决这个问题:
1)模板是名称前带_的.gsp文件,如_myTemplate.gsp
。将它放在您将使用的控制器的视图文件夹中。
2)
def action(){
def var
//some logic to populate the variable
Map model = [myVar: var]
render(template: '_myTemplate', model: model)
}
在模板中,可以使用${myVar}
3)在您需要更新的div中,放置<g:include>
而不是之前的内容(现在内容在模板中)
<g:include controller='controller' action='action' />
4)jquery部分(每5秒获取一次模板):
$(document).ready(
function() {
setInterval(function() {
$('#divId').load('/app/controller/action');
}, 5000);
});
你也可以使用$ .get()函数,结果似乎是相同的