【问题标题】:How to translate Javascript Class to ScalaJS如何将 Javascript 类翻译成 ScalaJS
【发布时间】:2021-02-20 16:56:07
【问题描述】:

我有这个简单的 Javascript 代码:

import Modeler from 'bpmn-js/lib/Modeler';

import diagramXML from './diagram.bpmn';

const modeler = new Modeler({
  container: '#canvas'
});

modeler.importXML(diagramXML);

在浏览器中打开时会显示一个图表。

我想在 ScalaJS 中执行此操作,但我错过了一些东西。

这是我的代码:

@JSImport("resources/diagram.bpmn", JSImport.Default)
@js.native
object DiagramXML extends js.Object

object Main {

  @JSExportTopLevel("main")
  def main(): Unit = {
    val modeler = new Modeler(js.Object(
      "container" -> "#canvas"
    ))

   modeler.importXML(DiagramXML.toString)
 }
}

这是我为Modeler 设计的外观:

@js.native
@JSImport("bpmn-js/lib/Modeler", "Modeler")
class BpmnJS(options: js.Object) extends js.Object {

  def importXML(xml: String): js.Promise[Any] = js.native

}

当我调试时,xml 已正确加载。缺少的只是它在 DOM 中正确呈现。

【问题讨论】:

    标签: javascript scala scala.js


    【解决方案1】:

    我可以在您的翻译中发现两个问题。第一个是bpmn-js 的import。 JS 导入是

    import Modeler from 'bpmn-js/lib/Modeler';
    

    应该翻译成

    @JSImport("bpmn-js/lib/Modeler", JSImport.Default)
    

    根据the documentation on translating import into @JSImport.

    另一个问题更微妙。在您调用new Modeler 时,您有

    js.Object(
      "container" -> "#canvas"
    )
    

    which(也许不幸的是)编译但不做你认为它做的事。它创建了两个字符串的 Scala 元组,将其传递给 JavaScript 函数 Object(...),实际上将按原样返回它(因为 Scala 元组已经是一个对象)。

    你想要的是一个带有 container 字段的 JavaScript 对象,你可以写成这样

    new js.Object {
      val container = "#canvas"
    }
    

    一个更好的方法是让选项对象静态类型在外观中:

    class BpmnJS(options: BpmnJSOptions) extends js.Object {
      ..
    }
    
    trait BpmnJSOptions extends js.Object {
      var container: js.UndefOr[String] = js.undefined
    }
    

    这样,你就可以把它称为

    new BpmnJS(new BpmnJSOptions {
      container = "#canvas"
    })
    

    【讨论】:

    • 感谢这项工作 - 有趣的是它仅在使用您提议的 BpmnJSOptions 时才有效。
    猜你喜欢
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2017-07-24
    相关资源
    最近更新 更多