データベースにあるデータを編集できる光沢のあるアプリケーションがあります。私のアプリケーションでは、IDを選択して対応するデータを取得します。 (この例の「レコード」の例)このデータは、さまざまな光沢のあるウィジェットに書き込まれ、それらを編集することができます。 (「textID」と「remarksID」の下の例では)編集して送信ボタンを押すと、データベースのデータが更新されます。光沢のあるアプリケーションデータは、デフォルトでは特別な入力ウィジェットでは表示されません
これはあまり複雑ではありませんし、通常の光沢のあるウィジェットを使用している場合はそうではありません。しかし、私は特別な手作りの入力ウィジェットを使用しています(次のようにSO答え:How to create TextArea as input in a Shiny webapp in R?)。 javascriptを使用することにより、手作業の入力ウィジェットを記入することができます。しかし、ある意味では入力値として認識されず、画面でしか視覚化されません。手作りの入力ウィジェットを編集するとき、それは入力値として認識されます。
これはまだ大きな問題ではないようです。しかし、手作業による入力値を変更したくないとし、他の入力値を変更して編集を提出するとします。ハンドメイドの入力値が空の文字列に変更されます。
下記の光沢のあるアプリケーションで問題が示されます。備考入力ウィジェットの視覚化された入力は、デフォルトでは表示されません。 (データベースに返信されます)
library(shiny)
library(shinyjs)
jsCode<-"shinyjs.FillRemarks = function(remarks){document.getElementById('remarksID').value = remarks}"
record <- structure(list(ID = "x1y2z3",
Country = "Netherlands",
Remarks = "Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla blabla bla bla bla bla"),
.Names = c("ID","Country", "Remarks"),
class = "data.frame", row.names = 1L)
ui <- shinyUI(fluidPage(mainPanel(
useShinyjs(),
extendShinyjs(text = jsCode),
fluidRow(
br(),
column(2,
selectInput("selectID",label = "Select ID:", choices = record$ID, selected = record$ID)
),
br(),br(),br(),hr()
),
fluidRow(
column(12,
textInput("textID",label = "Country:")
)
),
fluidRow(
column(3,
tags$p(id="remarksLabelID","Remarks:"),
tags$textarea(id="remarksID", rows=3, cols=40, "")
),
tags$style(type='text/css', "#remarksLabelID {
display: inline-block;
max-width: 100%;
margin-bottom: 5px;
font-weight: 700;
}"),
tags$style(type='text/css', "#remarksID {
resize: none;
width: 100%;
display: block;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
}")
),
fluidRow(
hr(),
column(12,
titlePanel("Preview"),
tableOutput("tableID")
)
)
)))
server <- function(input, output, session){
observeEvent(input$selectID,{
updateTextInput(session, "textID", label = "Country:", value = record$Country)
print(js$FillRemarks(record$Remarks))
})
observe({
outputTable <- structure(list(ID = record$ID,
Country = input$textID,
Remarks = input$remarksID),
row.names = 1L, class = "data.frame")
output$tableID <- renderTable({
outputTable
})
})
}
shinyApp(ui=ui, server=server)
私は間違った方向に考えていますか? また、この質問の良いタイトルを考え出すことができません。
Iは、(たとえ標準入力タイプの)JavaScriptの修正入力値は、光沢のあるサーバ側によってピックアップされていない他の例を見てきました。私はあなたが明示的に送信するには、https://ryouready.wordpress.com/2013/11/20/sending-data-from-client-to-server-and-back-using-shiny/のテクニックを使う必要があると思いますサーバーへの値。 –