调用numericInput()
,像这样:
numericInput("obs", "Observations:", 10, min = 1, max = 100)
构建的HTML代码如下:
<div class="form-group shiny-input-container">
<label for="obs">Observations:</label>
<input id="obs" type="number" class="form-control" value="10" min="1" max="100"/>
</div>
那么,在浏览器中,由HTML文档头部包含的脚本之一提供的JavaScript代码会查找
<input>
元素并显示下面的交互式小部件:![enter image description here](https://istack.dev59.com/pDYAt.webp)
<input>
元素并触发相应小部件生产的代码。它是在Shiny自己的JavaScript中还是在从Bootstrap或jQuery UI或其他与shiny一起提供的插件借用的JavaScript中? 我的问题是:提供上面图片所示的小部件并将其与HTML<input>
元素相关联的JavaScript代码位于何处?从涉及到的代码中,我应该如何自行了解这一点呢?更可能有用的细节请看此处的脚本"shiny.js"
该部分查找感兴趣的<input>
元素,并提供可以获得和设置小部件值的方法。就我所看到的,它没有提供小部件本身。var numberInputBinding = {};
$.extend(numberInputBinding, textInputBinding, {
find: function(scope) {
return $(scope).find('input[type="number"]');
},
getValue: function(el) {
var numberVal = $(el).val();
if (/^\s*$/.test(numberVal)) // Return null if all whitespace
return null;
else if (!isNaN(numberVal)) // If valid Javascript number string, coerce to number
return +numberVal;
else
return numberVal; // If other string like "1e6", send it unchanged
},
setValue: function(el, value) {
el.value = value;
[... snip ...]
}
});
inputBindings.register(numberInputBinding, 'shiny.numberInput');
以下是生成 numericInput
小部件的 shiny HTML 文件中 <head>
部分的副本。它所引用的脚本大多可以在这里找到。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script type="application/shiny-singletons"></script>
<script type="application/html-dependencies">json2[2014.02.04];jquery[1.11.0];shiny[0.12.2];bootstrap[3.3.1]</script>
<script src="shared/json2-min.js"></script>
<script src="shared/jquery.min.js"></script>
<link href="shared/shiny.css" rel="stylesheet" />
<script src="shared/shiny.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link href="shared/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<script src="shared/bootstrap/js/bootstrap.min.js"></script>
<script src="shared/bootstrap/shim/html5shiv.min.js"></script>
<script src="shared/bootstrap/shim/respond.min.js"></script>
<title>Hello Shiny!</title>
</head>
<input type="number">
这样的“表单增强”铺平了道路。 - Josh O'Brien