Je voudrais développer certains des composants web dans un projet Polymer 2.0 avec scala.js. Bien qu'il existe un wonderful demo-project on github démontrant comment cela fonctionne avec Polymer 1.0. Je ne peux pas obtenir quelque chose de similaire à travailler avec Polymer 2.0 et la technique native d'enregistrement d'éléments.réelles classes JS dans scala.js pour développer des composants Web
Une façade simple pourrait ressembler à la
@ScalaJSDefined
class PolymerElement extends PolymerBase {
def is: String = ""
def properties: js.Dynamic = js.Dynamic.literal()
}
@js.native
@JSGlobal("Polymer.Element")
class PolymerBase extends HTMLElement
suivant l'élément réel:
@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
}
Peu importe si je prends l'ancien enregistrement des éléments de style Polymer(MyElement)
ou la plate-forme variante native window.customElement.define(MyElement.is, MyElement)
Il évidemment Lève une exception car MyElement
n'est pas instable avec new MyElement
. Il jette l'exception:
Uncaught TypeError: Class constructor PolymerElement cannot be invoked without 'new'
L'étude du Scala.js facade writing guide, je l'ai déjà essayé beaucoup de façade variantes déclarant PolymerElement
et PolymerBase
abstrait.
Une solution possible qui me vient à l'esprit est, en écrivant une classe JavaScript native, qui est en effet instanciable et en utilisant @js.native
façades sur eux. Mais je cherche un moyen de le réaliser avec quelque chose Scala.js 0.6.16 fournit.
Cognez-y aussi. Avez-vous trouvé une solution pour cela? – abdolence
Pas vraiment, j'ai abandonné l'idée, de tout faire dans scala.js, pour que le squelette de l'élément reste normal JS et les fonctions auxiliaires pertinentes sont écrites dans scala.js ... On m'a dit que le support de transpiration ES6 viendra dans v. 1.0 de scala.js bientôt ... Dans l'attente de cela – SeDav
@SeDev je vois. C'est de ça que j'ai peur. Quoi qu'il en soit, merci pour votre aide! – abdolence