我有以下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
我必须采取不同的做法,或者我的问题是什么?