当前位置: 首页 > 知识库问答 >
问题:

从名称中识别小部件类型

梁丘招
2023-03-14
is.textInput("my_text")
widget.type("my_list")
is.textInput <- function(widget_id){
    out <- tryCatch(
        {
        # attempt to treat it as a textInput, change it and change it back
        tmp <- input[[widget_id]]
        updateTextInput(session, widget_id, value = character(0))
        updateTextInput(session, widget_id, value = tmp)
        },
        error=function(cond) { return("NO") },
        warning=function(cond) { return("NO") },
        finally={}
    )
    # if error message happens then not textInput
    if(out == "NO")
        return("FALSE")
    # if no error message then is textInput
    return("TRUE")
}

但我不想故意制造错误/异常。我不希望逻辑检查改变应用程序的状态。

其他关于我如何实现这一目标的建议?

共有1个答案

文德曜
2023-03-14

更新:我修改了javascript代码中的一行,使其与IE/RStudio Viewer兼容。IE/Viewer抛出错误,因为函数include()不支持,请参见。include()在Internet Explorer中不起作用。相反,可以使用indexof()

您可以使用javascript按ID检查输入元素。可以通过document.getElementById()找到该元素,然后可以通过getAttribute('class')getAttribute('type')标识该类型。

结果可以通过shiny.oninputchange('input type',...)“发送”给R;并通过input$inputtype在R中使用。

该函数的第一个示例是:

getWidgetType <- function(widgetId){
  paste0(
    "elem = document.getElementById('", widgetId,"');
    var message;
    if(elem == null){
      message = 'No input with id = ", widgetId," exists.'
    }else{
      // RStudio Viewer + IE workaround (dont have .include())
      if(elem.getAttribute('class').indexOf('js-range-slider') > -1){ 
        message = 'slider'
      }else if (elem.nodeName == 'SELECT'){
        message = 'select'
      }else{
        message = elem.getAttribute('type');
      }
    }
    Shiny.onInputChange('inputType', message)
    "
  )
}

请注意,我为四个输入做了一个示例:numeric、text、selectInput和SliderInput。如果添加其他输入,则可能还必须检查其他属性。

可复制的例子:

library(shiny)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  textInput("textInput", "id = textInput", "text"),
  numericInput("numInput", "id = numInput", 10),
  sliderInput("slideInput", "id = slideInput", 1, 10, 5),

  hr(style = "height:1px;border:none;color:#333;background-color:#333;"),
  textInput("widgetType", "widget type by id", "textInput"),
  textOutput("widgetId")
)

server <- function(input, output, session) {

  output$widgetId <- renderText({
    runjs(getWidgetType(input$widgetType))
    input$inputType
  })

}

shinyApp(ui, server)
 类似资料:
  • 我正在使用内置的woocommerce类别小部件,目前它同时显示类别和子类别。 我通过以下代码排除了一个类别: 但是小部件仍然显示它的子类别。 链接:http://tithaty.com.br/?post_type=product 隐藏的类别是Coleções(我配置为父级),我想隐藏它的子类别,当前的和将来添加的子类别。 Colecao teste是一个子类别的例子。 有什么想法吗? 非常感谢。

  • 我有以下代码,用于从WooCommerce产品类别小部件中删除除管理员和批发客户(自定义用户级别)之外的所有用户的“批发类别”(通过slug)。 这非常好,但是它只删除了父类别,留下了所有的子类别。我如何也删除“批发类别”的子类别? 谢啦

  • 我试图在WooCommerce的子类别页面中查找父类别名称,即我有4个主要类别。 父母1 子1 子2 子3等 父母2 子1 子2 子3等 等等。 如果我在Sub2的列表页上,Sub2是Parent1的子级,我想知道Parent1类别的名称。

  • 小部件(Widgets)是功能丰富、有状态的插件,它有一个完整的生命周期,带有方法和事件。您可以查看 部件库(Widget Factory)文档 了解更多详情。 API 描述 也属于类别 折叠面板部件(Accordion Widget) 把一对标题和内容面板转换成折叠面板。 自动完成部件(Autocomplete Widget) 自动完成功能根据用户输入值进行搜索和过滤,让用户快速找到并从预设值列

  • 我刚开始使用openNLP来识别名字。我使用的是open NLP附带的模型(en-ner-person.bin)。我注意到,虽然它可以识别美国、英国和欧洲的名字,但它不能识别印度或日本的名字。我的问题是(1)是否已经有模型,我可以用来识别外国名字(2)如果没有,那么我相信我将需要生成新的模型。在这种情况下,是否有一个可供我使用的copora?

  • 问题内容: 在Java中,这些之间有什么区别: 我已经多次检查过Javadoc,但这从来不能很好地解释它。我也进行了测试,但没有反映出调用这些方法背后的任何实际含义。 问题答案: 如果不确定某件事,请尝试先编写测试。 我这样做: 印刷品: 最后一个块中有一个空条目,其中返回一个空字符串。 结果是: 该 名称 是您愿意使用动态加载与类,例如,调用的名称与默认。在一定范围内,所有类都有唯一的名称。 该

  • 本文向大家介绍phpcms的分类名称和类别名称的调用,包括了phpcms的分类名称和类别名称的调用的使用技巧和注意事项,需要的朋友参考一下 话不多说,请看代码: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!

  • 我有一个运行: 默认段落样式为: 此运行在msword中显示Calibri字体名称。卡里布里在里面的唯一地方。docx是theme1。xml(a:theme/a:themeElements/a:fontScheme/a:minorFont/a:latin)。主题为“办公主题”,方案为“办公”。 在这种情况下,这是搜索字体名称的正确位置吗