-
Notifications
You must be signed in to change notification settings - Fork 102
Closed
Description
I read through the issues of custom tags but must admit, that i did not fully understand if it is possible to extend Binding.scala with custom tags.
Say OnsenUI defines a custom tag <ons-page>
, how can i use this in Binding.scala?
I tried the following wrapper
package onsen
import com.thoughtworks.binding._
import Binding._
import org.scalajs.dom.document
import org.scalajs.dom.raw.Node
import scala.language.implicitConversions
import scala.scalajs.js
import scala.scalajs.js.annotation.JSName
case class OnsenBasicComponentBuilder(tagName: String) {
def render = this
var modifier: Binding[String] = _
@dom def build = {
val element=document.createElement(tagName)
element.setAttribute("modifier",modifier.bind)
element
}
}
object Onsen {
implicit def autoBinding[A](a: A): Binding[A] = ???
implicit final class CustomTags(x: dom.Runtime.TagsAndTags2.type) {
def OnsPage() = OnsenBasicComponentBuilder("ons-page")
def OnsToolbar() = OnsenBasicComponentBuilder("ons-toolbar")
def OnsToolbarButton() = OnsenBasicComponentBuilder("ons-toolbar-button")
def OnsIcon() = OnsenBasicComponentBuilder("ons-icon")
def OnsButton() = OnsenBasicComponentBuilder("ons-button")
}
implicit def toHtml(x: OnsenBasicComponentBuilder): BindingSeq[Node] = {
Constants(x.build).mapBinding(identity)
}
}
and use it as follows
import onsen.Onsen._
@dom
def page = {
<div>
<OnsPage><OnsToolbar></OnsToolbar></OnsPage>
</div>
}
getting
overloaded method constructor NodeSeqMountPoint with alternatives:
[error] (parent: org.scalajs.dom.raw.Node,childBinding: com.thoughtworks.binding.Binding[org.scalajs.dom.raw.Node])com.thoughtworks.binding.dom.Runtime.NodeSeqMountPoint <and>
[error] (parent: org.scalajs.dom.raw.Node,childBinding: com.thoughtworks.binding.Binding[com.thoughtworks.binding.Binding.BindingSeq[org.scalajs.dom.raw.Node]],dummy: Unit)com.thoughtworks.binding.dom.Runtime.NodeSeqMountPoint <and>
[error] (parent: org.scalajs.dom.raw.Node,childrenBinding: com.thoughtworks.binding.Binding.BindingSeq[org.scalajs.dom.raw.Node])com.thoughtworks.binding.dom.Runtime.NodeSeqMountPoint
[error] cannot be applied to (onsen.OnsenBasicComponentBuilder, com.thoughtworks.binding.Binding.BindingSeq[org.scalajs.dom.raw.Node])
[error] <OnsPage><OnsToolbar></OnsToolbar></OnsPage>
[error] ^
Metadata
Metadata
Assignees
Labels
No labels