2016-08-22 65 views
0

我在我的應用程序中有一個好奇的問題,當我使用Play Framework的的。這就是問題所在:Javascript路由在播放框架不工作

Screenshot

,這是我的代碼:

class Application extends Controller { 

     import play.api.mvc._ 
     import play.api.routing._ 

     def javascriptRoutes = Action { implicit request => 
     Ok(
      JavaScriptReverseRouter("jsRoutes")(routes.javascript.ProcessController.retrieveAllProcess) 
     ).as("text/javascript") 
     } 
    } 

這是MUY路由文件:

GET /javascriptRoutes controllers.Application.javascriptRoutes 
    GET /Process/All  controllers.ProcessController.retrieveAllProcess 

這是html.scala文件:

var option = 
     { "url" : @routes.javascript.ProcessController.retrieveAllProcess, 
     ... 
     } 

非常感謝你:)。

回答

1

我認爲你很困惑JavaScript路由與反向路由。

Javascript路由

Javascript路由是爲了生成JavaScript代碼。生成的代碼定義了可以在您的JavaScript中用於在客戶端生成URL的函數。既然你已經定義了一個Action返回生成的代碼,你可以通過使用

<script type="text/javascript" src="@routes.Application.retrieveAllProcess()"></script> 

注意,這裏使用反向路由判斷哪些URL應該用於該腳本的HTML頁面,它包含在你的頁面。 :)

然後,在JavaScript代碼它可以用於像這樣

var retrieveAllProcessRoute = jsRoutes.controllers.Application.retrieveAllProcess() 

以產生含有兩個HTTP動詞和url到Application::retrieveAllProcess方法javascript對象。

反向路由

反向路由用於生成scala代碼。此代碼旨在生成視圖中的URL或Redirects到服務器端的控制器方法。

由於您在談論模板(*.html.scala),因此您正在討論事物的服務器端。這意味着您應該使用Play的反向路由功能。下面我已經重寫了您的JavaScript模板片段以使用反向路由:

var option = { 
    "url": @routes.Application.retrieveAllProcess, 
    ... 
}