无法在Scala.js中保留状态

时间:2016-12-24 21:44:14

标签: scala scala.js

我正在尝试编写一个简单的scala.js应用程序。我现在遇到的问题是我无法弄清楚为什么我无法保存从服务器/用户那里获得的数据。

更具体地说,这里是代码片段:

<!-- in my html -->
<script>
    example.RoomFrontend().setName("@name");
</script>
// in my scala.js src
@JSExport
object RoomFrontend extends js.JSApp {
  var username: Option[String] = None
  @JSExport
  def setName(name: String): Unit = {
    username = Some(name)
    g.console.debug(s"Got user name: $name")
  }

  case object TestUserMessage

  class Render(ctx: dom.CanvasRenderingContext2D) extends Actor {
    override def receive: Receive = {
      case TestUserMessage => g.console.debug(s"user name is $username")
    }
  }

  @JSExport
  def main(): Unit = {
    //... 
    // renderer is akka actorRef 
    dom.window.setInterval(() => render ! TestUserMessage, 50)
  }

所以,接下来会发生什么。我成功输入了用户名,例如Blah,我在js控制台中看到了很好的消息&#34;得到了用户名:Blah&#34;, 但问题是,每次调用渲染器时,都会说用户名是None。

我想这可能是因为我错误地在一个线程中分配变量(在js主线程中,我不知道它是否正确定义),并从actor线程中读取此变量...但是同样的故事发生在演员本身存储的变量中。

我想我不明白一些人应该如何使用scala.js,因为我对scala和js都是新的。拜托,有人可以解释这种奇怪的行为吗?

0 个答案:

没有答案