В моем приложении scala-js я хочу использовать библиотеку bootstraptoggle для создания красивой кнопки переключения.
Пока я создаю кнопку переключения способом, который выглядит примерно так:
import scalatags.JsDom
import scalatags.JsDom.all._
// ...
def createToggleButton(): JsDom.TypedTag[Input] = {
def onClick = println("HELLO WORLD!")
input(id := "myToggle",
attr("data-toggle") := "toggle",
`type` := "checkbox",
onclick := onClick,
attr("data-on") := "ON",
attr("data-off") := "OFF",
attr("data-onstyle") := "success",
attr("data-width") := "85",
attr("data-height") := "26")
}
При рендеринге и добавлении в мою DOM это выглядит так:
Пока все работает. Однако особенность заключается в следующем: При рендеринге страницы («F5») моя консоль (Chrome - «F12») показывает одну «HELLO WORLD!» вывод с самого начала. После этого событие onclick, похоже, не срабатывает больше нет.
Кто-нибудь знает, как это исправить?
Вы должны присвоить атрибуту () => action()
функция формы onclick
. В настоящее время вы оцениваете def onClick
один раз и сохраняете результат вызова этой функции (который является значением ()
) в атрибуте onclick
. Вместо этого вы должны написать
onclick := { () => onClick }
Поскольку мне не удалось заставить работать bootstrap-toggle, я решил сделать свой собственный. Итак, вот мое решение: ToggleSwitchWithLabels.scala
К сожалению, это не работает. Я пробовал писать
onclick := { () => println("HELLO WORLD!") }
, но теперь ничего не получаю. Я заметил, что он работает сonchange := { () => println("HELLO WORLD!") }
, но тогда мне понадобится небольшой обходной путь, чтобы различить, нажал ли пользователь кнопку или она была изменена API, поэтому я определенно предпочитаю использоватьonclick
.