0

我试图在 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>

字符串按钮:

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

我究竟做错了什么?

4

1 回答 1

1

那个参数的类型,乍一看确实有点迷惑,但仔细看类型的每一个元素,其实也很好理解:

Eliom_parameters.param_name

从 Eliom 文档:

键入'一个参数名称

参数名称的抽象类型。'a类型参数是一个幻像类型,通常是 Eliom_parameters的子类型。​setoneradio,用于表示参数的数量。

在这里,幻像类型意味着类型参数实际上并没有出现在类型定义中,而只是作为一种帮助类型检查器进一步区分值的方式,而不仅仅是它们的原始“未修饰类型”(我的意思是这里的类型没有幻像参数类型)。换句话说,无论'a是什么,它都不会改变你的函数所期望的实际值,但它可能会限制其他函数在输入后可以操作该值。

也就是说,类型 itelf 是一个抽象类型,这意味着我们不能直接构造该类型的值,我们必须依赖框架中包含的函数来为我们提供它们。

如果我们查看在eliom中是如何构建服务的,我们会注意到表单是使用占位符构建此类值的,并用一个为每个这些值提供参数的函数包装。这让我们可以构造可重用且有意义的 html 片段,例如带有强类型参数的表单。

文档证实了这一见解:

Eliom 重新定义了大多数表单元素(输入、文本区域、复选框等),以便根据服务的类型检查表单类型

在您的情况下,元素尚未嵌入表单中,因此您最好的选择可能是使用所谓的raw elements。大多数(如果不是全部)与常规表单小部件位于相同的模块中;您希望使用的那个被调用raw_button并接受string参数name和参数的value参数。

于 2014-12-26T02:16:05.390 回答