在播放模板中混合使用JavaScript和Scala

在播放模板中混合使用JavaScript和Scala,javascript,scala,playframework,Javascript,Scala,Playframework,我不知道这是怎么做到的。我可以硬编码我试图使用的路线,但我想用正确的方法 我有一个下拉列表,需要加载关于更改的新页面。下面是我基本上是如何尝试的(我已经尝试了一些变化): 然后您可以定义这样的函数来传入: @transactionsUrl(memberAccountKey: Long) = { @routes.Accounts.transactions(memberAccountKey) } @accountsDropdown(transactionDetails.getMemberAcc

我不知道这是怎么做到的。我可以硬编码我试图使用的路线,但我想用正确的方法

我有一个下拉列表,需要加载关于更改的新页面。下面是我基本上是如何尝试的(我已经尝试了一些变化):

然后您可以定义这样的函数来传入:

@transactionsUrl(memberAccountKey: Long) = {
  @routes.Accounts.transactions(memberAccountKey)
}

@accountsDropdown(transactionDetails.getMemberAccounts(), transactionDetails.getMemberAccountKey(), transactionsUrl)

您需要一种在页面中存储所有URL的方法,例如

<option value="@routes.Accounts.transactions(id)">Display</option>

你想得不对。JavaScript在客户端执行,而scala在服务器端执行!在这个方向上(JavaScript到Scala)两者之间进行通信的唯一方法是使用POST或GET。是的,您是对的,这些Scala语句需要在页面呈现之前进行处理。我当然不想为了得到路线的价值而打一个REST电话。我希望有一些方法可以动态地实现这一点,而无需打电话或在JS中硬编码路由。您能将其作为路由的一部分吗?比如
location.href='/products/'+$(this.val()然后在路由配置/控制器中处理它。也许更多关于您的案例细节可以帮助我们找到更好的解决方案,实践中的“$(this).val()”是什么?@WesFreeman,是的,我肯定可以这样做,但如果可能的话,我会尽量避免硬编码路线。我宁愿引用一个操作名称,以防路由因任何原因发生更改。但我想这就是我一直坚持的。列表中的所有项目都一样吗?然后你可以把它从scala那边传过来…好主意!我刚刚经历了一个重要的“为什么我他妈的没想到那件事”的时刻。我看不出为什么它不起作用,但我还是想先试试,以确保没有陷阱,我还没有机会。如果我尝试一下,它会起作用,那么你会得到你的绿色记号和15分:-)
@transactionsUrl(memberAccountKey: Long) = {
  @routes.Accounts.transactions(memberAccountKey)
}

@accountsDropdown(transactionDetails.getMemberAccounts(), transactionDetails.getMemberAccountKey(), transactionsUrl)
<option value="@routes.Accounts.transactions(id)">Display</option>
$("select[name='product']").change(function() {
  location.href = $(this).val();
});