2014-12-25 37 views
0

我試圖複製在Eliom下面的代碼,但我無法弄清楚複製<button>標籤的最佳方式。 Eliom的文檔只讓我更加困惑。似乎使用string_button可能是最好的方式,但我不明白我提供的name參數。如何複製<button>在Eliom

<!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#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 

但它只產生以下呃ror:

Error: Parse error: currified constructor 

我在做什麼錯?

回答

1

的類型參數的的確看起來有點乍看令人困惑,但通過查看類型的每個元素,它實際上是完全可以理解的:

Eliom_parameters.param_name 

從Eliom文檔:

type 'a param_name

Abstract type for parameters' name. The 'a type parameter is a phantom type, usually a subtype of Eliom_parameters.​setoneradio, used to denotes the parameter's arity.

這裏,幻影型即開型參數實際上並沒有出現在類型定義,但只是作爲一種方法來幫助類型檢查鑑別價值不僅僅是原來的「未修飾的類型」進一步(我的意思在這裏是沒有幻象的類型om參數類型)。換句話說,無論'a可能是,它不會改變實際值的功能會期望,但它可能會限制然後其他功能可以操縱這個值,一旦它被輸入。

也就是說,itelf是一個抽象類,這意味着我們不能直接構造該類型的值,必須依靠包括在框架中,爲他們提供我們的功能類型。

如果我們看看如何在eliom中構建服務,我們注意到表單是使用這種類型的值的佔位符構建的,並且包含一個爲每個值包含參數的函數。這讓我們構建可重複使用和有意義的HTML片段,如帶有強類型參數的表格

documentation證實了這個觀點:

Eliom redefines most forms elements (inputs, textareas, checkboxes, etc.) to make possible to check the type of the form w.r.t. the type of the service.

在你的情況下,要素在嵌入形式,所以你最好的選擇可能是使用所謂的原始元素。它們中的大多數(如果不是全部的話)與常規窗體小部件位於相同的模塊中;您希望使用的名稱爲raw_button,並且參數namevalue的參數均爲string參數。

+1

我試過'let button = string_button〜a:[]〜name:「button」〜value:「Go」[] ;;'但是它不檢查類型。我得到錯誤'錯誤:這個表達式有類型字符串,但是期望表達式類型爲[<字符串Eliom_parameter.setone] Eliom_parmaterer.param_name'。我不明白類型Eliom_parameter.setone是如何工作的。 – Thomas

+0

我不能檢查出來,你能指出你使用哪個版本的軟件包嗎? – didierc

+0

我正在使用Eliom 4.1.0和Ocsigenserver 2.5 – Thomas