与scala.js共享域名,怎么做?

时间:2017-03-29 16:57:23

标签: scala.js

可能是一个基本问题,但我对scala.js周围的各种文档和示例感到困惑。

我想在scala和scala.js之间分享一个域模型,让我们说:

class Estimator(val nickname: String)

...当然我想在web-client(scala.js with angular via angulate)和服务器(scala with spring-mvc on spring-boot)之间发送对象。

该类是否应扩展 js.Object ?并使用 @ScalaJSDefined 进行注释(在v0.6.15中尚未弃用)?

  • 如果是,那么服务器部分也会出现不必要的依赖关系。 @scalaJSDefined js.Object 都不在虚拟 scalajs-stubs 中。或者我错过了什么?
  • 如果不是,如何通过需要 js.Any 的$ http.post传递它们?我还在其他地方得到了一些 TypeError 。我应该到处捣蛋吗?还是有自动方式?

编辑2017-03-30:

实际上这与Angulate有关,我选择AngularJS的外观。对于2个功能(与http服务器的通信和在html中显示模型字段),域类必须是Javascript类。在Angulate的示例中,域模型是重复的。

还有(并且很遗憾)没有计划在 scalajs-stubs 中包含js.Object来克服此问题。 https://github.com/scala-js/scala-js/issues/2564中的详细信息。也许js.Object对jvm没有那么大的伤害......

那么,scala.js的哪些Web框架和外观确实/不能很好地支持共享域?不是angulate1,可能是Udash,也许会有反应?

1 个答案:

答案 0 :(得分:1)

(警告:我不知道Angulate,这可能会影响其中的一部分。一般来说,虽然......)

不,这些共享对象不应该来自js.Object或使用@ScalaJSDefined - 这些对象仅适用于与JavaScript本身接口的对象,并且它不会听起来像你的想法。仅适用于Scala的对象不需要它们。

但是 - 一般来说,你通常需要以这种或那种方式来腌制通信。你使用哪个酸洗库取决于你(有几个),但请记住,通信只是一个字节流 - 你必须告诉系统如何在域对象和那些字节之间进行序列化和反序列化。

Scala.js本身没有任何自动 - 这只是一种语言,并不能决定你的图书馆选择。你可以使用implicits使酸洗半自动,但我建议你要小心一点。我没有在Angulate文档中看到任何明显的东西,表明它会自动进行酸洗。