2016-07-10 6 views
0

FrageWie übergeben Sie Variablen in widget_html

Der letzte Abschnitt der htmlwidgets.org Seite auf Custom widget HTML sagt, dass Sie Ihre eigene HTML zu einem Widget, indem Sie eine Funktion <widget_name>_html

Wie genannt hinzufügen Sie übergeben Variablen an diese Funktion?

Beispiel

ich ein neues Paket erstellt haben genannt myWidgetHTML und htmlwidgets::scaffoldWidget(name = "myHTML”) laufen. Das Paket auf meinem github page

Innerhalb der erzeugten R/myHTML.R Datei gehostet wird, habe ich die Funktion erstellt

#' @import htmltools 
myHTML_html <- function(id, class, style, ...){ 
    myString <- "hello world" 
    tags$p(myString) 
} 

Gebäude und das Widget läuft erzeugt die Zeichenfolge hello world als

library(myWidgetHTML) 
myHTML(message = "") 
erwartet

enter image description here

Was ich nicht herausfinden kann ist, wie man die Funktion so schreibt Ich kann die Variable myString hineingeben:

#' @import htmltools 
#' @export 
myHTML_html <- function(id, class, style, myString, ...){ 
    tags$p(myString) 
} 

Geht man durch die source code for the widgets kein Licht als dem entsprechenden Abschnitt vergossen hat (kopiert unten) schlägt es weitere Argumente durch ... akzeptiert, aber ich kann nicht sehen, wo man schicke sie ein.

widget_html <- function(name, package, id, style, class, inline = FALSE, ...){ 

    # attempt to lookup custom html function for widget 
    fn <- tryCatch(get(paste0(name, "_html"), 
        asNamespace(package), 
        inherits = FALSE), 
       error = function(e) NULL) 

    # call the custom function if we have one, otherwise create a div 
    if (is.function(fn)) { 
    fn(id = id, style = style, class = class, ...) 
    } else if (inline) { 
    tags$span(id = id, style = style, class = class) 
    } else { 
    tags$div(id = id, style = style, class = class) 
    } 
} 
+0

Ich wurde [https://twitter.com/timeportfolio/status/752313318610644992] zu "htmlwidgets" von einem der Mitwirkenden [informiert], dass das im Moment nicht möglich ist. – SymbolixAU

Antwort

2

Um diese Frage zu schließen, ist die offizielle Antwort, dass dies nicht möglich ist.

Referenz: This tweet von @timelyportfolio

ab jetzt zu keinem wirklichen Weg, dies zu erreichen

ich eine mögliche Lösung gedacht wäre x in widget_html passieren, und so diese vorgeschlagene als eine mögliche Lösung. Allerdings weist @jjallaire out dies nicht, wenn sie mit Shiny

Referenz verwendet arbeiten: Issue 212

Das Problem ist, dass innerhalb von Shiny Anwendungen „x“ ist noch nicht zu dem Zeitpunkt bekannt widget_html genannt wird. Der beste Weg, dies zu erreichen, ist das mutieren des DOM nach Bedarf beim ersten Aufruf von renderValue auf der JavaScript-Seite.

Verwandte Themen