playframework 1.2.4在视图中使用渲染调用jquery中的动作

时间:2013-05-17 09:50:05

标签: jquery ajax groovy rendering playframework-1.x

我正在尝试在两个控制器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中调用动作播放并加载模板? 如果有人知道如何做到这一点,那将非常有帮助。

感谢。

2 个答案:

答案 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>