Alterator/class test and btn: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «Очень часто необходимо получить от пользователя данные и передать их backend-у. В данном прим...»)
 
Нет описания правки
 
(не показаны 4 промежуточные версии 1 участника)
Строка 1: Строка 1:
Очень часто необходимо получить от пользователя данные и передать их backend-у.  В данном примере мы рассмотрим как это сделать при помощи поля input типа text и обычной кнопки.
Актуально для alterator-4.17-alt3 alterator-fbi-5.26-alt1
28.05.2010
 
Очень часто необходимо получить от пользователя данные и передать их на обработку backend-у.  В данном примере мы рассмотрим как это сделать при помощи поля текстового input и обычной кнопки.


'''HTML'''
'''HTML'''
Строка 5: Строка 8:
Пример нашего html-кода
Пример нашего html-кода
<pre>
<pre>
<!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">
<form method="POST">
     <table width="100%">
     <table width="100%">
Строка 28: Строка 35:
     </table>
     </table>
</form>
</form>
</body>
</html>
</pre>
</pre>


В соответствии с этим кодом, у нас будет поле input типа text и уникальным атрибутом name newdata (name -- обязательный атрибут). Так же имеем кнопку (input class=btn) с надписью "Create/Add" уникальный атрибут name datadd.  
В соответствии с этим кодом, имеется текстовое поле input с уникальным атрибутом name (обязательный) и значением "newdata". Так же имеется кнопка (input class=btn) с надписью "Create/Add" и уникальный атрибут name (обязательный) со значением "datadd".  


При нажатии на копку "Create/Add" значение в поле newdata должно быть передано нашему серверу и далее до backend-а.
При нажатии на копку "Create/Add" значение в поле newdata должно быть передано нашему серверу и далее backend-у.


'''AJAX'''
'''AJAX'''
Строка 54: Строка 64:
</pre>
</pre>


В определении функции init мы осуществляем привязку элемента, действия и функции-обработчик <code>(form-bind "datadd" "click" ui-datadd)</code>: при нажатии ("click") на объект с именем datadd (наша кнопка) вызвать функцию-обработчик ui-datadd.  
В определении функции init мы осуществляем привязку элемента, действия и функции-обработчика <code>(form-bind "datadd" "click" ui-datadd)</code> : при нажатии ("click") на объект с именем datadd (наша кнопка) вызвать функцию-обработчик ui-datadd.  




В свою очередь функция ui-datadd вызывает действие new (woo-new) с параметром toBackendData и значением, полученным из поля с уникальным именем newdata (form-value "newdata"). Это аналогично обращению к backend-у через alterator-cmdline вида <code>alterator-cmdline /mySuper-module action new toBackendData "sometext". К стандартным действия list, type, write, read, new delete, которым соответствуют функции woo-list, woo-type, woo-write, woo-read, woo-new, woo-delete, можно добавить любое свое, тогда вызов несколько измениться. К примеру пусть это будет действие addData. Тогда заменим вызов woo-new на следующий <code>(woo "addData" "/mySuper-module" 'toBackendData (form-value "newdata"))</code>
В свою очередь функция ui-datadd вызывает действие new (woo-new) с параметром toBackendData и значением, полученным из поля с уникальным именем newdata (form-value "newdata"). Это аналогично обращению к backend-у через alterator-cmdline вида <code>alterator-cmdline /mySuper-module action new toBackendData "sometext"</code>. К стандартным действия list, type, write, read, new delete, которым соответствуют функции woo-list, woo-type, woo-write, woo-read, woo-new, woo-delete, можно добавить любое свое, тогда вызов несколько измениться. К примеру пусть это будет действие addData. Тогда заменим вызов woo-new на следующий <code>(woo "addData" "/mySuper-module" 'toBackendData (form-value "newdata"))</code>




'''BACKEND'''
'''BACKEND'''
<pre>
#!/bin/sh
#turn of auto expansion
set -f
alterator_api_version=1
. alterator-sh-functions
. shell-config
addMyData()
{
        echo "$1" >> /tmp/mysuperconfig.file.txt
}
on_message(){
  case "$in_action" in
  new)
        [ -n "$in_toBackendData" ] && addMyData "$in_toBackendData"
    ;;
  esac
}
message_loop
</pre>
Данный backend, при получении значения в переменной in_action (действие), проверяет соответствие слову new. Хотя это может быть любым другим действием, к примеру addData. Если соответствие найдено, то проверяется переменная in_toBackendData на наличие значения, если проверка успешная, вызывается функция addMyData с параметром in_toBackendData, которая просто записывает этот параметр в файл /tmp/mysuperconfig.file.txt


[[Категория:Alterator]]
{{Category navigation|title=Alterator|category=Alterator|sortkey={{SUBPAGENAME}}}}

Текущая версия от 20:22, 20 июля 2015

Актуально для alterator-4.17-alt3 alterator-fbi-5.26-alt1 28.05.2010

Очень часто необходимо получить от пользователя данные и передать их на обработку backend-у. В данном примере мы рассмотрим как это сделать при помощи поля текстового input и обычной кнопки.

HTML

Пример нашего 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>

В соответствии с этим кодом, имеется текстовое поле input с уникальным атрибутом name (обязательный) и значением "newdata". Так же имеется кнопка (input class=btn) с надписью "Create/Add" и уникальный атрибут name (обязательный) со значением "datadd".

При нажатии на копку "Create/Add" значение в поле newdata должно быть передано нашему серверу и далее backend-у.

AJAX

Наш модуль имеет uri/url /mySuper-module

(define-module (ui mySuper-module ajax)
    :use-module (alterator woo)
    :use-module (alterator ajax)
    :export (init))

(define (ui-datadd)
  (woo-new "/mySuper-module" 'toBackendData (form-value "newdata"))
)


(define (init)
  (form-bind "datadd" "click" ui-datadd)
)

В определении функции init мы осуществляем привязку элемента, действия и функции-обработчика (form-bind "datadd" "click" ui-datadd) : при нажатии ("click") на объект с именем datadd (наша кнопка) вызвать функцию-обработчик ui-datadd.


В свою очередь функция ui-datadd вызывает действие new (woo-new) с параметром toBackendData и значением, полученным из поля с уникальным именем newdata (form-value "newdata"). Это аналогично обращению к backend-у через alterator-cmdline вида alterator-cmdline /mySuper-module action new toBackendData "sometext". К стандартным действия list, type, write, read, new delete, которым соответствуют функции woo-list, woo-type, woo-write, woo-read, woo-new, woo-delete, можно добавить любое свое, тогда вызов несколько измениться. К примеру пусть это будет действие addData. Тогда заменим вызов woo-new на следующий (woo "addData" "/mySuper-module" 'toBackendData (form-value "newdata"))


BACKEND


#!/bin/sh 

#turn of auto expansion
set -f

alterator_api_version=1
. alterator-sh-functions
. shell-config


addMyData()
{
        echo "$1" >> /tmp/mysuperconfig.file.txt
}


on_message(){

  case "$in_action" in
  new)
        [ -n "$in_toBackendData" ] && addMyData "$in_toBackendData"
    ;;
  esac
}

message_loop

Данный backend, при получении значения в переменной in_action (действие), проверяет соответствие слову new. Хотя это может быть любым другим действием, к примеру addData. Если соответствие найдено, то проверяется переменная in_toBackendData на наличие значения, если проверка успешная, вызывается функция addMyData с параметром in_toBackendData, которая просто записывает этот параметр в файл /tmp/mysuperconfig.file.txt