我正在尝试在两个控制器Entity和EntityGlobal之间共享一个html视图。
实体控制器方法显示:
public static void show(String id) {
Object entity = entityService(id);
renderTemplate("@detailEntity", entity);
}
EntityGlobal控制器方法显示:
public static void show(String id) {
Object entity = globalEntityService(id);
renderTemplate("@detailEntity", entity);
}
实际情况:
查看实体控制器的list.html:
...
<table>
#{list entities, as:'entity'}
<tr>
<td><a href="@{Entity.show(entity.id)}">entity.name</a></td>
...
</tr>
#{/list}
</table>
...
查看EntityGlobal控制器的list.html:
...
<table>
#{list entities, as:'entity'}
<tr>
<td><a href="@{EntityGlobal.show(entity.id)}">entity.name</a></td>
...
</tr>
#{/list}
</table>
...
除了以下行之外,所有代码都是重复的:
<a href="@{EntityGlobal.show(entity.id)}">
我正在尝试这样的事情:
通用模板视图listTemplate.html:
...
<table>
#{list entities, as:'entity'}
<tr>
<td><a href="javascript:show('${entity.id}');">entity.name</a></td>
...
</tr>
#{/list}
</table>
...
查看实体控制器的list.html:
#{include 'listTemplate.html' /}
<script>
var showEntity = #{jsAction @Entity.show(':entityId') /};
function show(entityId) {
$.get(showEntity({entityId: entityId}), function() {console.log("entity SUCCESS");});
}
</script>
查看EntityGlobal控制器的list.html:
#{include 'listTemplate.html' /}
<script>
var showEntity = #{jsAction @EntityGlobal.show(':entityId') /};
function show(entityId) {
$.get(showEntity({entityId: entityId}), function() {console.log("entity global SUCCESS");});
}
</script>
它不起作用。当我点击一个链接时,调用方法@ EntityGlobal.show(':entityId'),打印出console.log的消息,但是没有在视图'detailEntity'上进行渲染。
是否可以在jquery中调用动作播放并加载模板? 如果有人知道如何做到这一点,那将非常有帮助。
感谢。
答案 0 :(得分:0)
我找到了使用playframework标签的工作:
标记tag_list.html:
<table>
#{list _entities, as:'entity'}
%{ _entityShow = _entityShow.toString().replace(":entityId", entity.id); %}
<tr>
<td><a href="${_entityShow}">entity.name</a></td>
...
</tr>
#{/list}
</table>
查看实体控制器的list.html:
#{tag_list entityShow:@Entity.show(':entityId'), entities: entities /}
查看EntityGlobal控制器的list.html:
#{tag_list entityShow:@EntityGlobal.show(':entityId'), entities: entities /}
答案 1 :(得分:0)
<script>
var showEntityUrl = '@@{EntityGlobal.show(entity.id)}';
window.location = showEntityUrl;
</script>