我正在尝试在 Eliom 中复制以下代码,但我无法找出复制 <button>
标签的最佳方法。Eliom 文档只会让我更加困惑。似乎使用string_button
可能是最好的方法,但我不明白我为name
论点提供了什么。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h2>Button Styles</h2>
<button type="button" class="btn btn-default">Default</button>
<button type="button" class="btn btn-primary">Primary</button>
<button type="button" class="btn btn-success">Success</button>
<button type="button" class="btn btn-info">Info</button>
<button type="button" class="btn btn-warning">Warning</button>
<button type="button" class="btn btn-danger">Danger</button>
<button type="button" class="btn btn-link">Link</button>
</div>
</body>
</html>
string_button:
val string_button :
?a:HTML5_types.button_attrib Eliom_pervasives.HTML5.M.attrib list ->
name:[< string Eliom_parameters.setone ] Eliom_parameters.param_name ->
value:string ->
HTML5_types.button_content Eliom_pervasives.HTML5.M.elt list ->
[> HTML5_types.button ] Eliom_pervasives.HTML5.M.elt
string_button文档:http://ocsigen.org/eliom/2.0/api/client/Eliom_output.Html5#VALstring_button
编辑:我认为 Eliom 文档中的类型签名
name:[< string Eliom_parameters.setone ] Eliom_parameters.param_name
type +'a param_name
type 'a setone = [ `One of 'a | `Set of 'a ]
意味着我会使用类似的东西
~name:(`One "name_goes_here")
具有类型签名
[> `One of string ]
这会让我相信我需要使用
~name:(`One "name_goes_here") param_name
获取
[< string Eliom_parameters.setone ] Eliom_parameters.param_name
但它只产生以下错误:
Error: Parse error: currified constructor
我做错了什么?
该参数的类型乍一看确实有点混乱,但通过查看类型的每个元素,实际上很容易理解:
Eliom_parameters.param_name
从 Eliom 文档中:
在这里,幻像类型意味着类型参数键入 'A param_name
参数名称的抽象类型。
'a
类型参数是幻像类型,通常是Eliom_parameters的子类型。setoneradio,用于表示参数的arity。
实际上不会出现在类型定义中,而只是作为一种帮助类型检查器进一步区分值的方法,而不仅仅是其原始的"未修饰类型"(我的意思是没有幻像参数类型的类型)。换句话说,无论'a
是什么,它都不会更改函数期望的实际值,但可能会限制哪个其他函数可以在键入该值后操作该值。
也就是说,itelf 类型是一个抽象类型,这意味着我们不能直接构造该类型的值,我们必须依靠框架中包含的函数为我们提供它们。
如果我们看一下如何在 eliom 中构造服务,我们会注意到表单是使用此类值的占位符构建的,并且用一个函数包装,该函数为每个值都有一个参数。这让我们可以构建可重用且有意义的 html 片段,例如具有强类型参数的表单。
文档证实了这一见解:
Eliom重新定义了大多数表单元素(输入,文本区域,复选框等),以便可以检查表单的类型以及服务的类型。
在您的情况下,元素尚未嵌入到表单中,因此最好的选择可能是使用所谓的原始元素。它们中的大多数(如果不是全部)与常规表单小部件位于相同的模块中;您希望使用的参数称为raw_button
,并接受name
和value
参数的string
参数。