【问题标题】:shared domain with scala.js, how?与 scala.js 共享域,如何?
【发布时间】:2017-03-29 16:57:23
【问题描述】:

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

我想在 scala 和 scala.js 之间共享一个域模型,比如说:

class Estimator(val nickname: String)

...当然我想在网络客户端(scala.js 与 angular 通过 angulate)和服务器(scala 与 spring-mvc 在 spring-boot)之间发送对象。

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

  • 如果是,这将是一个不需要的依赖项,它也出现在服务器部分。 @scalaJSDefinedjs.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,也许是反应?

【问题讨论】:

    标签: scala.js


    【解决方案1】:

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

    不,那些共享对象不应该从 js.Object 派生或使用 @ScalaJSDefined —— 这些只适用于设计用于与 JavaScript 本身交互的对象,听起来不像你想的那样.仅用于 Scala 的对象不需要它们。

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

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

    【讨论】:

    • 在 Angular 中使用了一些 javascript,例如选择一个字段(例如:选择 estimator.nickname 作为 的模型和字段)。如果没有@ScalaJSDefined,则字段具有特殊名称,例如 nickname$1
    • pickle: AngularJS pickle 默认使用 JSON 编码。它由 spring-boot 处理,所以一切都很好。 Angulate,我选择的 AngularJS 外观,适用于 js.Any。目前不支持普通的 Scala 对象。
    • 嗨@justin-du-coeur,你为scala.js 使用了什么网络框架?你有时需要从js.Object 派生它吗?
    • 我不使用已建立的框架——Querki 基本上早于所有 Scala.js 框架外观,所以我将自己的框架从 jQuery、Scalatags、Scala.Rx 和其他零碎的东西中推出.效果相当好,但我目前不推荐这条路线:这需要付出很多努力。
    • 至于从js.Object 派生,当然——但问题是,大多数框架不会为 datadisplay使用相同的对象>。显示对象通常需要在某种程度上从js.Object 派生,但客户端/服务器数据对象很少这样做,至少在大多数框架中是这样。但同样,我不知道 Angular...
    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 2017-01-31
    • 2019-01-28
    • 2016-10-09
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多