使用scala.html时在括号内添加参数值

问题描述 投票:0回答:1

我想在我的scala html中添加动态参数值(不确定我是否可以这样调用它)到url。

使用javascript,我首先获得userId,然后将其传递给@ routes.adminController.auth(userId)。

这是我的源代码,

<script type="text/javascript">
function checkboxChecked() {
  var checkbox = $('td > input:checked').length;

  if(checkbox == 1){
    var $checked = $('td > input:checked');
    var userId = $checked.parent().next().text();

    ** I would like to add below and make it work**
   //location.href = @routes.AdmnTask.user_set(userId)

  } else {
    alert("Please select 1 User ID to proceed.")
  }

};
</script>

经过几次尝试后,我注意到我无法设置一些随机变量并将其放入location.href,如下所示。

var link = "@routes.AdmnTask.user_set(userId)"
location.href = link

请问有人能帮我解决这个问题吗?

先感谢您。

javascript html scala
1个回答
1
投票

正如我在评论中所说,你不能在Scala函数中使用Javascript变量,因为Scala是在服务器端和Javascript客户端执行的。

但是有一个解决方法。

如果你的@routes.AdmnTask.user_set( ... )给你一个带有参数的URL,比如http://example.com/userSet/1http://example.com/userSet?id=1,你可以创建一个函数,将这个URL转换成更通用的:

/**
 * Gets the base URL for a given route
 *
 * @param  url Call - The route called with the parameter 0
 * @return The URL base String.
 */
public static String baseUrl(play.api.mvc.Call url){
    return url.toString().substring(0, url.toString().length() - 1);
}

此函数将切断URL字符串中的最后一个字符,以便您可以在Scala模板中使用它。

然后,您在Scala / Javascript中需要做的就是:

location.href = '@yourClass.baseUrl(routes.AdmnTask.user_set(0))' + userId

编辑:这是上面函数的Scala版本:

def baseUrl(url: play.api.mvc.Call): String = {
  url.toString.substring(0, url.toString.length - 1)
}
© www.soinside.com 2019 - 2024. All rights reserved.