通过在 Grails 中调用 AJAX 刷新 g:each 标签
Refresh g:each tag via AJAX call in Grails
我有一个显示最后注册用户的统计面板。我想执行 AJAX 调用来上传面板,而无需重新加载整个页面。
我认为有如下代码:
<g:each in="${lastUsers}" var="user">
<div class="mt-comments">
<div class="mt-comment">
<div class="mt-comment-img">
<g:if test="${user?.avatar}">
<img src="${createLink(controller:'controllerUser',
action:'image', id: user?.id)}" />
</g:if>
<g:else>
<img class="img-circle"
src="${resource(dir: 'img/profile', file: 'user_profile.png')}"/>
</g:else>
</div>
<div class="mt-comment-body">
<div class="mt-comment-info">
<span class="mt-comment-author">${user?.username}</span>
<span class="mt-comment-date">
<g:formatDate date="${user?.dateCreated}"/>
</span>
</div>
<div class="mt-comment-text">${user?.email}</div>
<div class="mt-comment-details">
<g:if test="${user?.enabled}">
<span class="mt-comment-status label label-sm label-success circle">
</g:if>
<g:else>
<span class="mt-comment-status label label-sm label-info circle">
</g:else>
<g:formatBoolean boolean="${user?.enabled}"/>
</span>
<ul class="mt-comment-actions">
<li>
<g:link controller="user" action="edit" id="${user?.id}">Edit</g:link>
</li>
</ul>
</div>
</div>
</div>
</div>
</g:each>
另外,我有一个按钮,当它被点击时会调用 AJAX 函数。 Ajax函数接收到JSON格式的数据成功。从那里,我不知道上传我的 g:each 标签。
我已尝试使用 Grails 的 remoteFunction 来使用上传属性,但出现错误:未配置 javascript 提供程序 我已经搜索了解决方案但没有任何解决方案对我有用。
AJAX调用:
$('.button').click(function() {
$.ajax({
url: URL,
success: function(data) {
console.log(data[index]);
console.log(val.username);
console.log(val.dateCreated);
console.log(val.email);
console.log(val.enabled);
console.log(val.avatar);
console.log(val.id);
},
error: function(){
},
});
谢谢你的帮助。
您可以使用 grails 模板和 jQuery 加载方法来代替使用 JSON 数据。这是一个快速 POC。
模板 (_userComments.gsp)
这将充当可重用视图,可以通过 AJAX 调用或直接包含在其他视图中。
<g:each in="${lastUsers}" var="user">
<div class="mt-comments">
.....
</div>
</g:each>
查看 (main.gsp)
我们的主要观点。
<div class="userComments">
<!-- When the Page is Loaded, We need render this without an Ajax Call -->
<g:render template="userComments" model="['lastUsers':lastUsers]"/>
</div>
Javascript
$('.button').click(function() {
$( ".userComments" ).load( "user/userComments" );
});
控制器
我们正在定义两种方法,一种用于主视图,另一种用于 ajax 调用。
def index() {
def lastUsers = User.list();
render(view:'main', model: [lastUsers: lastUsers])
}
// Ajax Call
def userComments() {
def lastUsers = User.list(); // what ever your fetch logic is
render(template:'userComments', model: [lastUsers: lastUsers])
}
我有一个显示最后注册用户的统计面板。我想执行 AJAX 调用来上传面板,而无需重新加载整个页面。
我认为有如下代码:
<g:each in="${lastUsers}" var="user">
<div class="mt-comments">
<div class="mt-comment">
<div class="mt-comment-img">
<g:if test="${user?.avatar}">
<img src="${createLink(controller:'controllerUser',
action:'image', id: user?.id)}" />
</g:if>
<g:else>
<img class="img-circle"
src="${resource(dir: 'img/profile', file: 'user_profile.png')}"/>
</g:else>
</div>
<div class="mt-comment-body">
<div class="mt-comment-info">
<span class="mt-comment-author">${user?.username}</span>
<span class="mt-comment-date">
<g:formatDate date="${user?.dateCreated}"/>
</span>
</div>
<div class="mt-comment-text">${user?.email}</div>
<div class="mt-comment-details">
<g:if test="${user?.enabled}">
<span class="mt-comment-status label label-sm label-success circle">
</g:if>
<g:else>
<span class="mt-comment-status label label-sm label-info circle">
</g:else>
<g:formatBoolean boolean="${user?.enabled}"/>
</span>
<ul class="mt-comment-actions">
<li>
<g:link controller="user" action="edit" id="${user?.id}">Edit</g:link>
</li>
</ul>
</div>
</div>
</div>
</div>
</g:each>
另外,我有一个按钮,当它被点击时会调用 AJAX 函数。 Ajax函数接收到JSON格式的数据成功。从那里,我不知道上传我的 g:each 标签。
我已尝试使用 Grails 的 remoteFunction 来使用上传属性,但出现错误:未配置 javascript 提供程序 我已经搜索了解决方案但没有任何解决方案对我有用。
AJAX调用:
$('.button').click(function() {
$.ajax({
url: URL,
success: function(data) {
console.log(data[index]);
console.log(val.username);
console.log(val.dateCreated);
console.log(val.email);
console.log(val.enabled);
console.log(val.avatar);
console.log(val.id);
},
error: function(){
},
});
谢谢你的帮助。
您可以使用 grails 模板和 jQuery 加载方法来代替使用 JSON 数据。这是一个快速 POC。
模板 (_userComments.gsp)
这将充当可重用视图,可以通过 AJAX 调用或直接包含在其他视图中。
<g:each in="${lastUsers}" var="user">
<div class="mt-comments">
.....
</div>
</g:each>
查看 (main.gsp)
我们的主要观点。
<div class="userComments">
<!-- When the Page is Loaded, We need render this without an Ajax Call -->
<g:render template="userComments" model="['lastUsers':lastUsers]"/>
</div>
Javascript
$('.button').click(function() {
$( ".userComments" ).load( "user/userComments" );
});
控制器
我们正在定义两种方法,一种用于主视图,另一种用于 ajax 调用。
def index() {
def lastUsers = User.list();
render(view:'main', model: [lastUsers: lastUsers])
}
// Ajax Call
def userComments() {
def lastUsers = User.list(); // what ever your fetch logic is
render(template:'userComments', model: [lastUsers: lastUsers])
}