2016-06-08 77 views
1

我必須在Web項目上使用Play框架,在該框架中我必須將視圖與控制器類連接起來。這意味着,我必須使用在控制器(scala)中聲明的方法(scala.html)。 我真的不知道如何。 我試過類似在視圖中使用控制器方法 - 播放框架 - 斯卡拉

 @controller.class.method() 

但它沒有工作。 我查過它,但什麼都沒發現,也許是因爲它太簡單了,任何人都會問這個問題..?

我很感激幫助。

+0

你能不能給您所想要達到的目的的例子嗎? – sarcan

回答

1

您可以通過以下方式訪問模板中的反向路線:

@routes.controllersFolder.MyControllerName.endPointName 

這將解析爲路線。

如路線文件:

GET /myApp/endpointExample controllersFolder.MyControllerName.endPointName 

所以

@routes.controllersFolder.MyControllerName.endPointName 

將解析:

/myApp/endpointExample 

如果您正在尋找使用在客戶端的AJAX我會強烈推薦JSRoutes

如果你想有一個控制器的功能,那麼你應該有它的模塊,如分離:

trait MyTrait { 
    def add(x: Int, y: Int): Int = x + y 
} 

@Singleton 
class MyClass with MyTrait 

@Singleton 
class MyController @Inject() (myClass: MyClass) extends Controller { 
    def endPointName(x: String, y: String): Action[AnyContent] = { 
    try { 
     Ok(
     Json.toJson(
      Json.obj(
      "result" -> myClass.add(
       x = x.toInt, 
       y = y.toInt 
      ) 
     ) 
     ) 
    ) 
    } catch { 
     case e: NonFatal => BadRequest(
     Json.toJson(
      Json.obj(
      "error" -> e.getMessage 
     ) 
     ) 
    } 
    } 
} 

然後,您可以參考MyClass的邏輯,而不必形成一個請求,去耦邏輯像這樣:

在HMTL

myView.scala.html

@Singleton 
class MyOtherController @Inject() (myClass: MyClass) extends Controller { 
    def myHtmlPage(): Action[AnyContent] = { 
    views.html.myView(myClass) 
    } 
} 

@(myClass: MyClass) 

@myClass.add(1, 2) // = 3 

我希望這有助於 里斯

1

如果你想調用視圖控制器,你應該用reverse routes

的幫助下做假設你的路線是這樣的

GET /hello/:name   controllers.Application.hello(name) 

在視圖定義,你可以叫它使用下面的代碼

@routes.Application.hello("test") 

祝你好運