如何在不硬编码url的情况下从javascript重定向到播放框架url
我需要做一些看起来很简单的事情 正如我可以从scala.html文件中创建指向另一个url的链接一样,如何在不硬编码url的情况下从javascript重定向到播放框架url,javascript,redirect,playframework,routes,Javascript,Redirect,Playframework,Routes,我需要做一些看起来很简单的事情 正如我可以从scala.html文件中创建指向另一个url的链接一样,/entry,我需要从javascript文件中执行此操作 i、 例如,从scala.html: <div class="footer"> <a href='@routes.Application.index()'>Home</a> </div> 对于来自javascript的路由,我已经为一些ajax工作设置了j
/entry
,我需要从javascript文件中执行此操作
i、 例如,从scala.html:
<div class="footer">
<a href='@routes.Application.index()'>Home</a>
</div>
对于来自javascript的路由,我已经为一些ajax工作设置了javascript路由
我的ajax工作是调用一个方法“findPersons()
”,因此在我的Application.java文件中,我已经:
public Result jsRoutes()
{
response().setContentType("text/javascript");
return ok(Routes.javascriptRouter( "appRoutes",
routes.javascript.Application.findPersons()));
}
因为我希望能够将重定向到我的GET entry()方法,所以我对其进行了如下修改:
public Result jsRoutes()
{
response().setContentType("text/javascript");
return ok(Routes.javascriptRouter( "appRoutes",
routes.javascript.Application.findPersons(),
routes.javascript.Application.entry()));
}
appRoutes.controllers.Application.findPersons().ajax({
data: {
personIdentifier : personIdentifier,
surname : surname,
givenNames : givenNames
},
success : processDBQuery
});
<div class="footer">
<a href='/'>Home</a>
</div>
function() myEvent {
window.location="/entry";
}
此外,我的路由文件中还包含以下内容:
GET /entry controllers.Application.entry()
POST /findPersons controllers.Application.findPersons()
当我调用findPersons方法时,它非常好而且简单。
看起来是这样的:
public Result jsRoutes()
{
response().setContentType("text/javascript");
return ok(Routes.javascriptRouter( "appRoutes",
routes.javascript.Application.findPersons(),
routes.javascript.Application.entry()));
}
appRoutes.controllers.Application.findPersons().ajax({
data: {
personIdentifier : personIdentifier,
surname : surname,
givenNames : givenNames
},
success : processDBQuery
});
<div class="footer">
<a href='/'>Home</a>
</div>
function() myEvent {
window.location="/entry";
}
对于我的简单重定向,我希望能够在我的html/javascript代码和URL之间保持相同的松耦合,就像我可以在上面的ajax调用中一样
我的重定向需要在事件上发生。因此,最简单、最快捷的解决方案应该是简单地编写:
function() myEvent {
window.location="/entry";
}
然而,然后我将硬编码URL(我在上面的ajax调用中设法避免了这种情况),不再保持我非常希望的松散耦合
然而,我在文档中没有看到任何示例,并且从我在生成的javascript(用于我的路由)中得到的信息来看,没有任何机会
有没有办法实现我的目标
谢谢你的阅读
p、 我要补充的是,在美国;我想我也考虑过使用生成的ajax调用的可能性,我想我可能可以获取我想要的页面。。。而且可能有一种方法可以用获取的页面的全部内容替换当前文档。但这听起来很糟糕。。。。错了
还是不
我很希望有一个替代,就像在我的html中一样
i、 e,生成如上所示的我的链接,如下所示:
public Result jsRoutes()
{
response().setContentType("text/javascript");
return ok(Routes.javascriptRouter( "appRoutes",
routes.javascript.Application.findPersons(),
routes.javascript.Application.entry()));
}
appRoutes.controllers.Application.findPersons().ajax({
data: {
personIdentifier : personIdentifier,
surname : surname,
givenNames : givenNames
},
success : processDBQuery
});
<div class="footer">
<a href='/'>Home</a>
</div>
function() myEvent {
window.location="/entry";
}
Jacques,从上面的评论中,帮助我实现了一种变通方法 在我的“资产定位”javascript文件中,我仍然可以引用位于javascript的页面/模板 位于javascript中的自己的文件/资产似乎没有按照我的预期进行转换。 然而,位于javascript的页面/模板正是按照我的要求进行转换的 我可以从位于javascript的资源中引用位于javascript的模板函数 这意味着,我在模板中有一个额外的小函数,为我重定向 i、 e myJavascript.js:
function personResultsListClickHandler(personId) {
var fpersonId = personId;
return function() {
window.alert("hello! " + fpersonId);
affectRedirect();
};
}
myTemplate.scala.html
@main("person lookup") {
<script type="text/javascript">
function affectRedirect(){
window.location="@routes.Application.entry()";
} // Need this here so it will be transformed.
// asset located javascript doesn't seem to get transformed like javascript here in template! :(...
</script>
还有其他人有更好的解决方案吗?你是如何启动该事件的?@Jacques该事件肯定正在启动。我已经在所有表行上设置了一个onclick侦听器(目前正在我的初始测试中),当我单击时,事件被触发,违规代码失败。但问题还是可以在我去点击之前看到。在Chrome开发工具中,我可以看到没有替代我的引用。或者如果我使用生成的方法,好的,有一个ajax调用,我猜该页面被获取了,但显然没有替换当前页面。我应该那样做吗?如何用ajax GET的结果替换当前页面?这听起来不太理想。因此,如果它位于行的onclick中,您可以将url作为参数添加到html中:
单击我
如果执行此操作,您可以将参数用作重定向的位置。@Jacques否,该行由javascript代码本身生成。javascript代码位于其单独的文件中。通过DOM方法“addEventListener”添加事件侦听器来监视事件。但是,是的,这种替代正是我所希望的。就在我的javascript文件中(因为我没有在html中硬编码行)啊,我假设这些行是通过框架在服务器上生成的。(我不是爪哇人。)嗯。。。。。我刚意识到这有个大问题。我无法将javascript参数传递给我的Scala代码方法“entry”,我也需要这样做。上面的注释“主要问题”只与调用位于模板的javascript方法有关。使用从调用appRoutes.controllers.Application.entry(personId)获得的javascript对象的url成员确实有效!