Scalajs-bundler button.onclick无效

时间:2017-02-25 10:53:04

标签: javascript scala scala.js scalajs-bundler

我有以下scala.js-object:

package tld.test

import org.scalajs.dom
import scala.scalajs.js.annotation.JSExport
object Main extends JSApp
{
  @JSExport
  def testFunction(): Unit =
  {
    dom.window.alert("testFunction()")
    println("Blubb")
  }

   def main(): Unit = dom.window.alert("main()")
}

这会生成

/** @constructor */
function $c_Ltld_test_Main$() {
  $c_O.call(this)
}
$c_Ltld_test_Main$.prototype = new $h_O();
$c_Ltld_test_Main$.prototype.constructor = $c_Ltld_test_Main$;
/** @constructor */
function $h_Ltld_test_Main$() {
  /*<skip>*/
}
$h_Ltld_test_Main$.prototype = $c_Ltld_test_Main$.prototype;
$c_Ltld_test_Main$.prototype.init___ = (function() {
  return this
});
$c_Ltld_test_Main$.prototype.main__V = (function() {
  $m_Lorg_scalajs_dom_package$().window__Lorg_scalajs_dom_raw_Window().alert("Yeah!")
});
$c_Ltld_test_Main$.prototype.$$js$exported$meth$testFunction__O = (function() {
  this.testFunction__V()
});
$c_Ltld_test_Main$.prototype.testFunction__V = (function() {
  $m_Lorg_scalajs_dom_package$().window__Lorg_scalajs_dom_raw_Window().alert("testFunction()");
  var this$2 = $m_s_Console$();
  var this$3 = $as_Ljava_io_PrintStream(this$2.outVar$2.v$1);
  this$3.java$lang$JSConsoleBasedPrintStream$$printString__T__V("Blubb\n")
});
$c_Ltld_test_Main$.prototype.$$js$exported$meth$main__O = (function() {
  this.main__V()
});
$c_Ltld_test_Main$.prototype.main = (function() {
  return this.$$js$exported$meth$main__O()
});
$c_Ltld_test_Main$.prototype.testFunction = (function() {
  return this.$$js$exported$meth$testFunction__O()
});
var $d_Ltld_test_Main$ = new $TypeData().initClass({
  Ltld_test_Main$: 0
}, false, "tld.test.Main$", {
  Ltld_test_Main$: 1,
  O: 1,
  sjs_js_JSApp: 1
});
$c_Ltld_test_Main$.prototype.$classData = $d_Ltld_test_Main$;
var $n_Ltld_test_Main$ = (void 0);
function $m_Ltld_test_Main$() {
  if ((!$n_Ltld_test_Main$)) {
    $n_Ltld_test_Main$ = new $c_Ltld_test_Main$().init___()
  };
  return $n_Ltld_test_Main$
}
$e.tld = ($e.tld || {});
$e.tld.test = ($e.tld.test || {});
$e.tld.test.Main = $m_Ltld_test_Main$;

在我plugins.sbt我也有:

addSbtPlugin("ch.epfl.scala" % "sbt-web-scalajs-bundler" % "0.5.0")

现在,在服务器上的某个时刻,脚本会被包含在服务的.html中。

我知道这个事实很有用,因为在加载页面时我会收到警告说

  

main()的

就像它应该的那样。

现在我想在网站上添加一个按钮并引用testFunction()

生成的.html看起来像这样:

<button name="test" type="button" class="inline" id="test" onclick="tld.test.Main().testFunction()">Test</button>

现在,当我按下那个按钮时,我会发出警告说

  

testFunction()

但遗憾的是情况并非如此,我无法理解为什么。

它非常类似于以下示例:https://www.scala-js.org/tutorial/basic/但对我来说这不起作用。是因为sbt-web-scalajs-bundler我必须采取不同的做法,或者我的问题是什么?

0 个答案:

没有答案