2016-08-29 1 views
0

Ich versuche, einen Klick-Handler für eine Reaktionskomponente mit sri & scala-react/scala-js zu erstellen. Im folgenden Code kann der onClick Handler nicht aufgelöst werden. Ich vermute, dass es eine Art Annotation oder etwas benötigt, aber ich habe es von einem Beispiel kopiert (Suche nach tick auf diesem page).Wie erstellt man einen Klick-Callback mit sri/scala-react?

Hier ist mein Code:

package demo.web.screens 

import org.scalajs.dom 
import demo.web.styles.GlobalStyle 
import shared.contactform.ContactForm 
import sri.core._ 
import sri.scalacss.Defaults._ 
import sri.web.all._ 
import sri.web.vdom.htmltags._ 

import scala.scalajs.js 
import scala.scalajs.js.annotation.ScalaJSDefined 

object ContactScreen { 

    @ScalaJSDefined 
    class Component extends ReactComponent[Unit, Unit] { 

    var bodyRef: dom.html.Input 
    var nameRef: dom.html.Input 
    var emailRef: dom.html.Input 

    def handleClick(e: ReactMouseEventI) = { 
     Option(bodyRef).foreach { body => 
     val form = ContactForm(body = body.value, 
      name = Option(nameRef).map(_.value), 
      email = Option(emailRef).map(_.value)) 

     println(s"Inside click handler with form: $form") 
     } 
    } 

    def render() = { 
     dom.console.log("In contact screen") 

     val contactForm = ContactForm(body = "static body", name = None, email = None) 
     println(s"contact form = $contactForm") 

     form()(
     div(className = GlobalStyle.flexOneAndCenter)(
      span(className = GlobalStyle.bigText)("Contact us"), 
      label()("Your name", 
      input(id = "name", ref = (e: dom.html.Input) => nameRef = e)), 
      label()("Your email address", 
      input(`type`="email", id = "email", 
       ref = (e: dom.html.Input) => emailRef = e)), 
      label()("Comments", 
      textarea(id = "body", ref = (e: dom.html.Input) => bodyRef = e)()), 
      button(id = "submit", onClick = handleClick _)("Submit") 
     ) 
    ) 
    } 
    } 

    val constructor = getTypedConstructor(js.constructorOf[Component], classOf[Component]) 

    def apply(key: js.UndefOr[String] = js.undefined, 
      ref: js.Function1[Component, _] = null) = { 
    createElementNoProps(constructor, key = key, ref = ref) 
    } 
} 
+0

Bitte poste ein fokussierteres Code-Snippet. Sie haben ungefähr 60 Zeilen gepostet, die ich durchlaufen muss, wenn der Fehler leicht in 2 Zeilen reproduziert werden kann. – nafg

+0

Bitte fügen Sie die genaue Fehlermeldung hinzu. "Kann nicht gelöst werden" ist nicht sehr klar. – nafg

+0

"sri & scala-react/scala-js" - hier gibt es keine separate Sache namens "scala-react". Es gibt eine Bibliothek namens scala-js-react, die eine Alternative zu Sri ist, die Sie nicht verwenden – nafg

Antwort

1

Sie haben nicht die Fehlermeldung enthalten, aber ich glaube, Sie button(id = "submit", onClick = handleClick(_: ReactMouseEventI))("Submit") oder button(id = "submit", onClick = (evt: ReactMouseEventI) => handleClick(evt))

zu schreiben habe ich hoffe, dass dies bald in Sri zu beheben, bereit Gd, so dieser Code wie dein funktioniert einfach.

+0

Vielen Dank für Ihre Antwort, und es tut mir leid, ich könnte nicht genauer sein, aber ich habe nur einen Fehler in intellij bekommen. Ich habe Ihre Änderung gemacht, aber immer noch einen Fehler bekommen "Class Component muss abstrakt sein, da es 3 nicht implementierte Mitglieder hat.", Dann heißt es weiter: "bodyRef_", "emailRef_" und "nameRef_" werden nicht überschrieben. – jbrown

+0

Ah, mach mal, das könnte ich dichter sein – jbrown

Verwandte Themen