忍者ブログ
technological blog
[11]  [10]  [9]  [8]  [7]  [6
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Ocsigenで再帰するフォームを作ってみた。

OcsigenのチュートリアルのActionというところを真似してみた。

作ってみたページの外観↓
再帰するフォーム(html)(入力しても意味ないよ)

以下はそのコード

open XHTML.M
open Eliom
open Eliom.Xhtml
open Lwt

let list_mapi f l =
let rec local i = function
| [] -> []
| hd::tl -> f i hd :: local (i+1) tl
in
local 0 l

let mylist = ref []

let table_of_hitchart () =
table
(tr (td[pcdata "[トラック]"]) [td[pcdata "  [曲名]"]])
(list_mapi (fun i s ->
tr (td[pcdata (string_of_int(i+1))]) [td[pcdata s]]) !mylist)

let my_table = create_table ()



let action_session =
new_service ~url:["add"] ~get_params:unit ()

let connect_action =
new_post_coservice' ~post_params:(string "moji") ()

let disconnect_action =
Actions.register_new_post_coservice'
unit
(fun sp () () ->
close_session sp >>=
(fun () -> return []))

let disconnect_box sp s =
post_form disconnect_action sp
(fun _ -> [p [submit_input s]]) ()

let input_box sp moji =
[p [pcdata "曲目を追加する: ";
string_input moji]]

let home_action sp () () =
let f = post_form connect_action sp (input_box sp) () in
return
(html
(head (title (pcdata "ADD")) [])
(body [h1 [pcdata "recursive form Example"];
h2 [pcdata "再生する曲目リスト"];
f;
table_of_hitchart()]))

let _ = register ~service:action_session home_action

let rec launch_session sp moji =
mylist := (moji :: !mylist);
set_session_data my_table sp moji

let _ = Actions.register
connect_action
(fun sp () login ->
close_session sp >>=
(fun () -> launch_session sp login;
return []))

PR
この記事へのトラックバック
この記事にトラックバックする:

カレンダー

08 2024/09 10
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

フリーエリア

最新CM

最新TB

プロフィール

HN:
No Name
性別:
非公開

バーコード

ブログ内検索

アーカイブ