31

HTML textarea コントロールを使用して、ユーザーから複数行の入力を取りたい単純な webapp を作成しようとしています。Shiny でそのような入力コントロールを作成するすぐに使える方法はありますか?

textInput のヘルプ ページに多くのオプションが表示されない

textInput {shiny}   R Documentation
Create a text input control

Description

Create an input control for entry of unstructured text values

Usage

  textInput(inputId, label, value = "")
Arguments

inputId 
Input variable to assign the control's value to

label   
Display label for the control

value   
Initial value

Value

A text input control that can be added to a UI definition.

Examples

textInput("caption", "Caption:", "Data Summary")
4

6 に答える 6

40

を使用してテキストエリアを追加でき、tagsShiny によって自動的に取得されます。

tags$textarea(id="foo", rows=3, cols=40, "Default value")

または、ストレートな HTML に慣れている場合は、次のこともできます。

HTML('<textarea id="foo" rows="3" cols="40">Default value</textarea>')

いずれの場合もinput$foo、テキストエリアの値を反映する必要があります。

于 2013-01-22T06:31:27.377 に答える
26

他の人の利益のために、Shinyチュートリアルに続いてカスタムUIコントロールを使用して問題を解決した方法を投稿します

まず、textarea.jsファイルを次のように作成しました

$(document).on("click", "textarea.inputTextarea", function(evt) {

  // evt.target is the button that was clicked
  var el = $(evt.target);

  // Raise an event to signal that the value changed
  el.trigger("change");
});

var inputTextareaBinding = new Shiny.InputBinding();
$.extend(inputTextareaBinding, {
  find: function(scope) {
    return $(scope).find(".inputTextarea");
  },
  getValue: function(el) {
    return $(el).text();
  },
  setValue: function(el, value) {
    $(el).text(value);
  },
  subscribe: function(el, callback) {
    $(el).on("change.inputTextareaBinding", function(e) {
      callback();
    });
  },
  unsubscribe: function(el) {
    $(el).off(".inputTextareaBinding");
  }
});

Shiny.inputBindings.register(inputTextareaBinding);

次に、shinyUI()が呼び出される前に、shinywebappのui.Rに次の関数を追加しました

inputTextarea <- function(inputId, value="", nrows, ncols) {
    tagList(
        singleton(tags$head(tags$script(src = "textarea.js"))),
        tags$textarea(id = inputId,
                    class = "inputtextarea",
                    rows = nrows,
                    cols = ncols,
                    as.character(value))
    )
}

次に、上記で定義した関数を使用して、ui.Rに目的のtextareaコントロール要素を作成しました。

shinyUI(pageWithSidebar(

  # Application title
  headerPanel("Test Header Panel"),

  sidebarPanel(),

  mainPanel(
        inputTextarea('exampleTextarea', '',20,35 )
  )
))
于 2013-01-22T06:43:49.880 に答える
15

ここでは関係ないかもしれませんが、Shiny で Ace テキスト エディターをまとめて公開するためのShinyAceパッケージを作成しました。Ace は主にコード編集に使用されます (さまざまな言語の構文強調表示を備えています) が、複数行のテキスト/コードを作成するためのテキスト領域のようなインターフェイスを提供します。

例をチェックして、それが探しているものであるかどうかを確認できます。(構文の強調表示にはさまざまな「モード」を、色の組み合わせにはテーマを試してください。)

于 2013-10-14T14:01:13.567 に答える
3

Joe の回答 ( https://stackoverflow.com/a/14452837/5776618 ) から構築すると、タグを独自の関数にネストして、標準の Shiny 組み込み入力関数と同じ出力を実現することもできます。

textareaInput <- function(id, label, value, rows=20, cols=35, class="form-control"){
  tags$div(
    class="form-group shiny-input-container",
    tags$label('for'=id,label),
    tags$textarea(id=id,class=class,rows=rows,cols=cols,value))
  }

これは、(必要に応じて) JS コードを記述しないようにする方法です...

  • 組み込みの Shiny 入力が呼び出されるのと同じ方法で呼び出す関数を持つこと、および
  • div、ラベル、および Bootstrap のフォーム コントロール CSS スタイルが含まれています (組み込みの Shiny 入力コントロールのように見えます)。

関数を使用することは、ビルトインを使用している場合、またはカスタム UI を構築した場合と同じです。

textareaInput("textareaID","Text Area Label", "Insert text here...", rows = 20, cols = 35)
于 2016-01-12T05:11:30.413 に答える