Как скопировать <button> в Eliom
Я пытаюсь скопировать следующий код в 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 doc: http://ocsigen.org/eliom/2.0/api/client/Eliom_output.Html5
Изменить: я думаю, что подписи типа из документации 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
Что я делаю неправильно?
1 ответ
Тип этого параметра на первый взгляд выглядит немного запутанным, но, глядя на каждый элемент типа, он на самом деле вполне понятен:
Eliom_parameters.param_name
Из документации Eliom:
введите 'имя_парам
Абстрактный тип для имени параметров.
'a
Параметр type - это фантомный тип, обычно подтип Eliom_parameters. setoneradio, используемый для обозначения арности параметра.
В данном случае фантомный тип означает, что параметр типа на самом деле не отображается в определении типа, а служит лишь способом помочь средству проверки типов различать значения дальше, чем просто их первоначальный "неокрашенный тип" (я имею в виду тип без фантомного типа параметра). Другими словами, что угодно 'a
может быть, это не изменит фактическое значение, ожидаемое вашей функцией, но может ограничить, какая другая функция может затем манипулировать этим значением после его ввода.
Тем не менее, тип itelf является абстрактным типом, что означает, что мы не можем создать значение этого типа напрямую, мы должны полагаться на функции, включенные в структуру, чтобы предоставить их нам.
Если мы посмотрим, как службы создаются в eliom, мы заметим, что формы создаются с использованием заполнителей для значений такого типа и заключены в функцию, содержащую параметр для каждого из этих значений. Это позволяет нам создавать многоразовые и значимые фрагменты HTML, такие как формы со строго типизированными параметрами.
Документация подтверждает это понимание:
Eliom переопределяет большинство элементов форм (входные данные, текстовые поля, флажки и т. Д.), Чтобы можно было проверить тип формы в зависимости от типа службы.
В вашем случае элементы еще не встроены в форму, поэтому лучше всего использовать так называемые необработанные элементы. Большинство (если не все) из них расположены в тех же модулях, что и обычные виджеты форм; тот, который вы хотите использовать, называется raw_button
и берет string
аргументы для обоих name
а также value
параметры.