2016-06-08 82 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") 

祝你好运