如何在不硬编码url的情况下从javascript重定向到播放框架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

我需要做一些看起来很简单的事情

正如我可以从scala.html文件中创建指向另一个url的链接一样,
/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成员确实有效!