Как вызвать функцию Эрланга в азоте?

-module (blah).
-compile(export_all).
-include_lib("nitrogen_core/include/wf.hrl").

main() -> #template { file="./site/templates/bare.html" }.

title() -> "Welcome to Nitrogen".

body() ->
#button { id=calcButton, text="Click"}.

imafunction(Param1, Param2) -> %something here%.

Как вы вызываете функцию imafunction(Param1, Param2) с ее параметрами, нажав кнопку?


person Perroquiet    schedule 25.11.2012    source источник


Ответы (1)


Вы захотите сделать это с помощью обратной передачи.

Самый простой способ — изменить кнопку, включив в нее атрибут postback:

#button { id=calcButton, text="Click", postback=do_click}.

Затем вам нужно обработать обратную передачу с помощью функции event/1:

event(do_click) -> 
    imafunction("first val","second val").

Но если вы хотите передать значения вместе с какими-то динамическими данными, вы можете сделать это одним из двух способов.

1) Вы можете передать его как часть обратной передачи, а значение обратной передачи будет соответствовать шаблону.

#button { id=calcButton, text="Click", postback={do_something,1,2} }

И затем совпадение с образцом при обратной передаче

%% Notice how this is matching the tuple in the postback
event({do_something,Param1,Param2}) ->
    imafunction(Param1,Param2).

или 2) Вы можете передавать значения в качестве входных данных (скажем, текстовое поле или раскрывающийся список)

Во-первых, добавьте поля параметров для отправки и убедитесь, что ваша кнопка выполняет обратную передачу.

body() ->
    [
        #label{text="Param 1"},
        #textbox{id=param1},
        #br{},
        #label{text="Param 2"},
        #textbox{id=param2},
        #br{},
        #button{ id=calcButton, text="Click", postback=do_other_thing}
   ].

Затем в вашей функции event/1 мы получим значения и вызовем вашу функцию.

event(do_other_thing) ->
    Param1 = wf:q(param1),
    Param2 = wf:q(param2),
    imafunction(Param1,Param2).

Вы можете узнать больше о постбэках азота и отправке данных на

person chops    schedule 25.11.2012