Scalajs-bundler button.onclick не работает

У меня есть следующий scala.js-объект:

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.

Я точно знаю, что это прекрасно работает, так как после загрузки страницы я получаю предупреждение

главный()

Как и должно быть.

Теперь я хотел добавить кнопку на сайт и ссылаться на testFunction(),

Сгенерированный.html выглядит так:

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

Теперь, когда я нажимаю на эту кнопку, я ожидаю, что

функции теста ()

но, к сожалению, это не так, и я не могу понять, почему.

Это довольно похоже на пример с: https://www.scala-js.org/tutorial/basic/ но для меня это не работает. Это из-за sbt-web-scalajs-bundler что я должен сделать что-то по-другому или в чем моя проблема здесь?

0 ответов

Другие вопросы по тегам