У меня есть приложение Scala. js, использующее Уда sh. Приложение использует некоторые Bootstrap расширения, которые напрямую манипулируют HTML DOM. Я хотел бы пройтись по этому DOM и добавить к нему еще несколько обработчиков (в конце концов я бы хотел, чтобы обработчики реализовали Uda sh binding ). Моя проблема в том, что я могу это сделать только путем вставки тега script
, который ожидает от меня предоставления простого кода Javascript.
Есть ли способ, которым я мог бы позвонить по Scala. js код из этого Javascript? Обычно я экспортирую глобальную функцию и передаю ей все необходимые параметры, однако я не вижу четкого способа передачи this
, единственный способ, которым я могу придумать, - это использовать глобальную переменную, которая выглядит мне безобразно. Есть ли что-то вроде локального экспорта или каким-либо другим способом, как создать код JavaScript, который я мог бы передать в script
, который мог бы получить доступ к конструкциям Scala. js?
Мой текущий код выглядит так:
// somewhere in class ExtTable .. in the `render` method
div(
p(id := componentId, "Html constructed here"),
script {
ExtTable.callback = { e =>
println(s"JS Callback for $e on $this")
}
//language=JavaScript
s"""
// I would like to implement this in Scala.js instead
var t = $$('#${componentId.toString}');
t.bootstrapTable();
t.find("tr td:first-of-type").each(function(i,e){
ExtTable.callback(e);
})
"""
}
).render
@js.annotation.JSExportTopLevel("ExtTable")
object ExtTable {
@js.annotation.JSExport
var callback: js.Function1[Element, Unit] = _
}