我需要做一些看似很简单的事情。
以同样的方式,从我的scala.html文件中,创建指向另一个网址/entry
的链接,我需要从javascript文件中执行此操作。
,即来自scala.html:
<div class="footer">
<a href='@routes.Application.index()'>Home</a>
</div>
来自我的javascript活动:
function() myEvent {
window.location="@routes.Application.entry()"; // DOESN'T WORK!
}
对于从javascript进行路由,我已经必须设置我的javascript路由以进行一些我已经不得不做的ajax工作。
我的ajax工作是调用方法&#39; findPersons()
&#39;所以在我的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()));
}
另外,我在路线文件中有这些:
GET /entry controllers.Application.entry()
POST /findPersons controllers.Application.findPersons()
当我调用findPersons方法时,它非常简单。 它看起来像这样:
appRoutes.controllers.Application.findPersons().ajax({
data: {
personIdentifier : personIdentifier,
surname : surname,
givenNames : givenNames
},
success : processDBQuery
});
对于我的简单重定向,我希望能够在我的html / javascript代码和url之间保持相同的松散耦合,因为我可以在上面调用ajax。
我的重定向需要在事件中发生。因此,最简单,最快捷的解决方案很简单:
function() myEvent {
window.location="/entry";
}
但是,然后我会对URL进行硬编码(我已经设法避免上面的ajax调用),不再保持我非常喜欢的松散耦合。
但是,我在文档中看不到任何示例,并且从生成的javascript(对于我的路由)中看到的内容没有机会。
有没有办法实现我的目标?
感谢阅读!
p.s。,我应该补充;我想我也想过使用生成的ajax调用的可能性,我想我可能会获取我想要的页面...并且可能有一种方法用获取的页面的整个内容替换当前文档。但那听起来很糟糕......错了......
是不是?我非常希望替换,就像在我的html
中所做的那样,即上面显示的链接生成如下:
<div class="footer">
<a href='/'>Home</a>
</div>
同样地,我希望在javascript中有一些替换方法,以便上面的事件函数最终被按下来看起来像这样:
function() myEvent {
window.location="/entry";
}
答案 0 :(得分:0)
Jacques,从上面的评论中,帮助我实现了解决方案。
来自我的&#34;资产位于&#34; javascript文件,我仍然可以参考位于javascript的页面/模板。
自己的文件/资产定位javascript似乎没有改变我的预期。 但是,页面/模板定位的javascript 完全按照我的要求进行了转换。
我可以从我的资产javascript找到一个位于javascript函数的模板。
这意味着,我在模板中有一个额外的小功能,可以为我重定向。
即,
<强> 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>
另一种可能性是通过调用
检索Javascript对象appRoutes.controllers.Application.entry()
包含网址成员。这个url成员正是我可以用来分配给window.location的。然而,它看起来有点非官方...... 1.成员没有记录 2.不确定将来是否存在url成员 3.生成的javascript正在构建一个处理ajax的对象...而我只是抓住它的URL成员......它只是感觉......就像一个黑客。
但是我已经对此进行了测试,但它确实有效。请参阅以下代码:
function patientResultsListClickHandler(personId) {
var fpersonId = personId;
return function() {
window.location=appRoutes.controllers.Application.entry(personId).url;
// window.location="/entry/" + fpersonId; // the sort of hard-coding of URL that
}; // I wanted to avoid, but don't seem able to.
}
还有其他人有更好的解决方案吗?