Alterator/catch message
Актуально для alterator-4.17-alt3 alterator-fbi-5.26-alt1
01/06/2010
Пример обработки ошибок. Имеется простая форма: поле для ввода данных, кнопка отправить. Часто различные проверки осуществляются на стороне сервера и при возникновении ошибки необходимо оповестить пользователя.
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html wf="none">
<body>
<form method="POST">
<table width="100%">
<tr>
<td align="left">
<span translate="_">New Data</span>
</td>
</tr>
<tr>
<td >
<hr />
</td>
</tr>
<tr>
<td >
<span translate="_">New Data:</span>
<input type="text" class="text" name="newdata"/>
<input type="button" name="datadd" value="Create/Add" class="btn"/>
</td>
</tr>
</table>
</form>
</body>
</html>
AJAX При возникновении ошибки woo-error или type-error необходимо использовать функцию сatch/message как показано ниже. В данном примере мы при нажатии на кнопку "Create/Add" отправляем данные на сервер backend-у. Который осуществляет проверку и при некорректности данных генерит ошибку типа woo-error. Функция catch/message данную ошибку "ловит" и выводит error-box пользователю с сообщением, переданным backend-ом.
(define-module (ui mySuper-module ajax)
:use-module (alterator woo)
:use-module (alterator ajax)
:export (init))
(define (ui-datadd)
(catch/message
(lambda()
(woo-new "/mySuper-module" 'toBackendData (form-value "newdata"))
)
)
(define (init)
(form-bind "datadd" "click" ui-datadd)
)
BACKEND
Если пользователь введет в поле слово Test, то возникнет сообщение об ошибке.
#!/bin/sh
#turn of auto expansion
set -f
alterator_api_version=1
. alterator-sh-functions
. shell-config
addMyData()
{
if [ "$1" = "Test" ] ;then
write_error "This is a test error"
fi
}
on_message(){
case "$in_action" in
new)
[ -n "$in_toBackendData" ] && addMyData "$in_toBackendData"
;;
esac
}
message_loop