Ich möchte einige der Webkomponenten in einem Polymer 2.0-Projekt mit scala.js entwickeln. Während es eine wonderful demo-project on github zeigt, wie es mit Polymer 1.0 funktioniert. Ich kann nichts Ähnliches mit der Arbeit mit Polymer 2.0 und der nativen Element-Registrierungstechnik bekommen.echte JS-Klassen in scala.js zur Entwicklung von Webkomponenten
Eswindow.customElement.define(MyElement.is, MyElement)
offensichtlich
@JSExportTopLevel("MyElement")
@ScalaJSDefined
class MyElement extends PolymerElement {
private var label = "init"
override def is = "my-element"
override def properties = js.Dynamic.literal(
"label" -> Map(
"type" -> "String",
"value" -> "init",
"notify" -> true
).toJSDictionary
)
def testMe = {
println(label)
}
}
object MyElement {
@JSExportStatic
val is: String = MyElement.is
@JSExportStatic
val properties: js.Dynamic = MyElement.properties
}
Egal ob ich nehme den alten Stil Element Registrierung Polymer(MyElement)
oder die Plattform nativen Variante:
Eine einfache Fassade wie folgt
@ScalaJSDefined
class PolymerElement extends PolymerBase {
def is: String = ""
def properties: js.Dynamic = js.Dynamic.literal()
}
@js.native
@JSGlobal("Polymer.Element")
class PolymerBase extends HTMLElement
Die tatsächliche Element aussehen könnte löst eine Ausnahme aus, da MyElement
nicht mit new MyElement
unveränderbar ist. Es wirft die Ausnahme:
Uncaught TypeError: Class constructor PolymerElement cannot be invoked without 'new'
die Scala.js facade writing guide Studium, ich habe bereits versucht, eine Menge Fassadenvarianten PolymerElement
und PolymerBase
abstrakte erklärt.
Eine mögliche Lösung, die mir in den Sinn kommt, ist das Schreiben einer nativen JavaScript-Klasse, die tatsächlich instanziierbar ist und @js.native
Fassaden auf ihnen verwendet. Aber ich suche nach einem Weg, um es mit etwas zu erreichen Scala.js 0.6.16 bietet.
Bump in diese auch. Haben Sie eine Lösung dafür gefunden? – abdolence
Nicht wirklich, ich verwarf die Idee, alles in scala.js zu tun, so dass das Elementskelett normal JS bleibt und die relevanten Hilfsfunktionen in scala.js geschrieben sind ... Mir wurde gesagt, dass ES6-Unterstützung für die Übertragung kommt in v. 1.0 von scala.js bald ... Ich freue mich schon darauf – SeDav
@SeDev ich sehe. Vor dem hatte ich Angst. Wie auch immer, danke für Hilfe! – abdolence