【问题标题】:playframework 1.2.4 invoke action in jquery with render on a viewplayframework 1.2.4 在 jquery 中调用操作并在视图上呈现
【发布时间】:2013-05-17 09:50:05
【问题描述】:

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    我发现使用 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 /}
    

    【讨论】:

      【解决方案2】:
      <script>
          var showEntityUrl = '@@{EntityGlobal.show(entity.id)}';
          window.location = showEntityUrl;
      </script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-12
        • 1970-01-01
        • 1970-01-01
        • 2019-02-08
        • 1970-01-01
        • 2018-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多