我试图通过远程操作部分更新视图
这是我的观点(home/index.gsp
)
<button type="button" class="btn btn-success">Update</button>
<g:render template="datetime", model="[mybean: mybean]"/>
这是我的模板(home / _datetime.gsp)
<p>Time: ${mybean.getHours()} : ${mybean.getMinutes()} : ${mybean.getSeconds()}</p>
这是我的js
$("button.btn-success").click(function(event){
$.post("/home/updateTime")
})
这是我的控制器
class HomeController {
def index() {
def bean = new MyDateBean()
render view:"index", model:[mybean:bean]
}
def updateTime(){
log.debug("Updating time")
def bean = new MyDateBean()
render template:"datetime", model:[mybean:bean]
}
class MyDateBean{
private String hours
private String minutes
private String seconds
MyDateBean(){
def date = new Date()
this.hours = date.format("H")
this.minutes = date.format("m")
this.seconds = date.format("s")
}
String getHours(){
return this.hours
}
String getMinutes(){
return this.minutes
}
String getSeconds(){
return this.seconds
}
}
}
如果我浏览到/home/index
,模板会正确呈现,但是当我单击该按钮时,模板不会更新。为什么呢?
答案 0 :(得分:1)
将模板包裹在div中,例如
void recordData(char *filename)
{
wRecord.open(filename, std::ios_base::app);
...
}
然后使用以下javascript:
<div id="dtsDiv">
<g:render template="datetime" model="[mybean: mybean]"/>
</div>
答案 1 :(得分:0)
我认为以上评论可以解答您对渲染模板的担忧。注释指出,当您触发jquery方法(ajax)时,会向控制器发出一个请求,并且可以使用
进行捕获if (request.xhr) {
render template:'template'
return
}
// since we return above no need for else and so hence otherwise
render view: 'view'
当向控制器发出ajax请求时,只能返回一个模板,因此除了Mike建议呈现响应文本之外,你自己的注释实际上是错误的。
无论如何,我的答案的理由与实际问题无关,更多地与groovy vs java方法的简易性有关
试
<p>Time: ${mybean.hours} : ${mybean.minutes} : ${mybean.seconds}</p>
试
class HomeController {
def index(MyDateBean bean) {
render view:"index", model:[mybean:bean]
}
def updateTime(MyDateBean bean){
log.debug("Updating time")
render template:"datetime", model:[mybean:bean]
}
class MyDateBean{
def date=new Date()
String getHours(){
return date.format("H")
}
String getMinutes(){
return date.format("m")
}
String getSeconds(){
return date.format("s")
}
}
}