R Shiny 中文文档3.4-定制下拉列表

八月 25, 2014 R, web开发, 可视化, 编程开发 por DeanGao

JavaScript 的插件 selectize.js 提供了一个很灵活的并具有扩展性的下拉列表。传统的基本下拉列表只能去滑动滚轮来选择自己想要的,并不能搜索,这在列表内容很大时是十分不方便的。Shiny引入了selectize.js这一JavaScript插件,它可以允许用户在列表中进行输入和搜索,使用占位符(提示信息),控制显示的数量和允许最大选择个数及一些其它功能。


转载请注明出处:网址+邮箱:
例如: 转自 
http://www.iwhgao.com (gaowenhui2012@gmail.com)


首先来整体感受下selectize的外观:

selectize

我们首先来看下selectInput方法的基本用法:

其中的choices参数为下拉列表中得具体元素,可以为一个字符串向量(不带name)也可以为一个带name的字符串向量;selected参数指明的是初始时所选中的元素,为NULL即为不选择任何元素;multiple为是否允许多选;selectize为是否转换为具有selectize功能的下拉列表;width定义控件宽度。

而selectizeInput方法的其它参数与selectInput方法的参数都一样,多的参数为options。该参数接受一个list对象,里面的参数大都与selectize.js的功能相对应,比如:placeholder为选择提示, maxOptions为最多供选择的条目数, maxItems为最多能选择多少选项, render执行JavaScript代码来自定义下拉列表元素的展示方式。

前面介绍的都是在客户端的设置,在服务器端Shiny通过updateSelectizeInput方法来动态的在客户端显示列表元素并利用options等参数中的一些设置如之前的 render来自定义下拉列表元素的展示方式等。要通过服务器端来更新下拉列表,首先要在客户端创建一个内容为空的实例:

再来介绍下updateSelectizeInput的参数和工作原理吧:

参数列表:

session shinyServer函数提供的存储一些环境变量的会话对象;

inputIdlabel ,selected略过;

server 决定是否把列表元素存储在服务器端以及根据搜索动态的导入元素,而不是把元素一次性全导入页面;

choices 在服务器端自定义下拉元素,可以是向量,列表等数据类型;

options 最为复杂的参数,具体的用法见selectize.js的使用文档

 


工作原理:

1. R将输入的查询字符串 根据空白分隔成多个关键词

2. 在指定的searchField字段中进行匹配

3. 根据组合规则(并或者或)来用AND OR显示连接结果

4. 根据之前定义的maxOptions来返回结果

 

看看下面的具体例子:

QQ截图20140825172417

 

代码如下:

 

Shiny的官方文档中还列举了更为详细和更具强大功能的selectizeInput应用:例子1, 例子2.

Ps: Shiny中还有其它一系列的update*函数,功能也与updateSelectizeInput类似。

原创文章,转载请注明: 转载自deangao's blog
本文链接地址: R Shiny 中文文档3.4-定制下拉列表