将Play Framework参数传递给javascript

时间:2013-05-16 14:06:14

标签: javascript playframework playframework-2.0

我正在尝试将来自我的控制器的参数传递给javascript脚本,以便我可以编辑数据。但是javascript不接受我的参数。

以下是代码:

@for(status <- lista){
<tr>
<td>@status.getDescricao()</td>
<td><a href="javascript:;" onclick="enviar('formAltStatus/@status.getCodStatus()')"><img src="@routes.Assets.at("img/edit.png")" alt="" title="Editar"/></a>
                    <a href="@routes.StatusController.removerStatus(status.getCodStatus())"><img src="@routes.Assets.at("img/erase.png")" alt="" title="Remover"/></a>
</td>
</tr>
            }

@ status.getCodStatus()是我的ID。

路线:

GET     /formAltStatus/:id              controllers.StatusController.formAltStatus(id:Long)

javascript:

function enviar(a){
    $.ajax({
        url: "/"+a,
        type: "GET",
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        dataType: "html",
        async:true,
        success: function(html){        
            $("#nova").html("");
            $("#nova").html(html);
            $("#logo").show();
        }
    });
}

还有其他办法吗?

2 个答案:

答案 0 :(得分:3)

HTML5 data attributes专为这种情况而设计,您必须将服务器端数据传递给客户端功能。我认为最佳实践解决方案是向锚标记添加数据属性,然后在Javascript中检索属性值。

<a ... data-status="@status.getCodStatus" data-param2="@param2">

然后,此代码说明了Javascript的外观。我没有太多的Javascript专业知识,所以我编写了一个使用JQuery的解决方案。如果您不使用JQuery并且只使用纯Javascript,则必须修改我的建议。

HTML:

<!-- Simple illustration of how to pass server-side data to a JS function -->
<a href="no-javascript.html" class="edit-link" data-status="@status.getCodStatus" data-param2="@param2">
    Hyperlink body goes here
</a>

使用Javascript:

$('.edit-link').click(function(e) {
   e.preventDefault();
   statusCode = $(this).data('status', 'param2');
   alert(statusCode);
 });

Live example on jsFiddle

答案 1 :(得分:0)

类似情况。想要将模板参数设置为角度范围变量。我通过了模型对象的Json版本,并使用ng-init对其进行了设置。

服务器端

return ok(views.html.database.admin.chargeGroups.render(Json.toJson(commodity)));

前端

@(commodity: com.fasterxml.jackson.databind.JsonNode)
@main("Charge Groups") {
<div ng-controller="ChargeGroupsController" ng-init="commodity = @commodity">