autowire 和 upickle 的最小示例
Minimal example for autowire and upickle
我不太明白如何将 minimal example 应用于我的网络应用程序。
在客户端代码中,我覆盖了 doCall
方法:
override def doCall(req: Request) = {
println(req)
MyServer.routes.apply(req)
}
但是客户端怎么会知道MyServer
呢?
当然,这里是可行的,因为所有代码都在同一个文件中,但实际上客户端和服务器通过 shared 交叉项目进行通信。
我需要用 dom.ext.Ajax.post
明确地写 doCall
吗?
我相信你想要的是longer example。 minimal 示例演示了同一项目 中的 Autowire API (不是很有用)。较长的示例演示了真正的 client/server 交互。
例如,it shows如何通过 AJAX 调用实现 doCall
:
object Client extends autowire.Client[Js.Value, Reader, Writer]{
override def doCall(req: Request): Future[Js.Value] = {
dom.ext.Ajax.post(
url = "/api/" + req.path.mkString("/"),
data = upickle.json.write(Js.Obj(req.args.toSeq:_*))
).map(_.responseText)
.map(upickle.json.read)
}
def read[Result: Reader](p: Js.Value) = readJs[Result](p)
def write[Result: Writer](r: Result) = writeJs(r)
}
我不太明白如何将 minimal example 应用于我的网络应用程序。
在客户端代码中,我覆盖了 doCall
方法:
override def doCall(req: Request) = {
println(req)
MyServer.routes.apply(req)
}
但是客户端怎么会知道MyServer
呢?
当然,这里是可行的,因为所有代码都在同一个文件中,但实际上客户端和服务器通过 shared 交叉项目进行通信。
我需要用 dom.ext.Ajax.post
明确地写 doCall
吗?
我相信你想要的是longer example。 minimal 示例演示了同一项目 中的 Autowire API (不是很有用)。较长的示例演示了真正的 client/server 交互。
例如,it shows如何通过 AJAX 调用实现 doCall
:
object Client extends autowire.Client[Js.Value, Reader, Writer]{
override def doCall(req: Request): Future[Js.Value] = {
dom.ext.Ajax.post(
url = "/api/" + req.path.mkString("/"),
data = upickle.json.write(Js.Obj(req.args.toSeq:_*))
).map(_.responseText)
.map(upickle.json.read)
}
def read[Result: Reader](p: Js.Value) = readJs[Result](p)
def write[Result: Writer](r: Result) = writeJs(r)
}