|
Jet Example |
Примеры применения асинхронных инструментов библиотеки com/teacode/jet.
package url
use libretto/text
use com/teacode/jet
use com/teacode/map
use view
def examples = {
fix html =
<div class="block">
<!-- Сохраняем выражение для вычисления значения скролла страницы -->
#{jet/store("d.scroll", "$('body').scrollTop()")}
<div><img src="/images/libretto.png"/></div>
<h3>Text</h3>
<!-- Элемент id="words" содержит предыдущие значения текстового поля,
вставленные с помощью метода insertWord -->
<div id="words"></div>
<!-- Комментарий -->
<div class="small">
Поле с id='newword' name='newword' class='param'<br/>
Событие
onkeyup = #jet/pct;jet/ajax('display, map/s {'type to 'text}, "#newword")
</div>
<!-- строка текстового ввода с реакцией на событие поднятия клавиши.
В ответ на это событие вызывается Libretto метод display -->
<div>
<input
type="text"
name="newword"
id="newword"
class="param"
onkeyup=#jet/ajax(
'display,
map/s {'type to 'text},
"#newword")/>
<!-- кнопка, инициирующая вставку в элемент id="words" текущего текста из
строки ввода с помощью метода insertWord -->
<button onclick=#jet/ajax('insertWord, (), "#newword")>
Добавить слово
</button>
<!-- элемент, в котором с помощью метода display демонстрируется
текущее значение строки текстового ввода -->
<div><span class="gr">value:</span> <span id="textdisplay"></span></div>
</div>
<div>
<h3>Radio</h3>
<!-- Комментарий -->
<div class="small">
Радио с name='radio' class='param'<br/>
Событие
onchange = #jet/pct;jet/ajax('display, map/s {'type to 'radio}, "$radio")
</div>
<!-- комплект радио-кнопок с реакцией на событие изменения значения.
В ответ на это событие вызывается метод display -->
<input
type="radio"
name="radio"
class="param"
value="radio-один"
onchange=#jet/ajax(
'display,
map/s {'type to 'radio},
"$radio")/>
One
<input
type="radio"
name="radio"
class="param"
value="radio-два"
onchange=#jet/ajax(
'display,
map/s {'type to 'radio},
"$radio")/>
Two
<!-- элемент, в который метод display вставляет текущее значение
блока радио-кнопок -->
<div><span class="gr">value:</span> <span id="radiodisplay"></span></div>
<h3>Checkbox</h3>
<!-- Комментарий -->
<div class="small">
Чекбокс с name='newword' class='param'<br/>
Событие
onchange=#jet/pct;jet/ajax('display, map/s {'type to 'checkbox}, ".box")
</div>
<!-- комплект чекбоксов с реакцией на событие изменения значения.
В ответ на это событие вызывается метод display -->
<input
type="checkbox"
name="newword"
class="param box"
value="checkbox1"
onchange=#jet/ajax(
'display,
map/s {'type to 'checkbox},
".box")/>
Один
<input
type="checkbox"
name="newword"
class="param box"
value="checkbox2"
onchange=#jet/ajax(
'display,
map/s {'type to 'checkbox},
".box")/>
Два
<!-- сюда метод display вставляет текущие значения чекбоксов -->
<div><span class="gr">value:</span> <span id="checkboxdisplay"></span></div>
<h3>Select</h3>
<!-- Комментарий -->
<div class="small">
Селект с name='select' class='param'<br/>
Событие
onchange=#jet/pct;jet/ajax('display, map/s {'type to 'select}, "$select")
</div>
<!-- выпадающее меню с реакцией на событие изменения значения.
В ответ на это событие вызывается метод display -->
<select
name="select"
class="param"
onchange=#jet/ajax(
'display,
map/s {'type to 'select},
"$select")>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
<!-- сюда метод display вставляет текущее значение выпадающего меню -->
<div><span class="gr">value:</span> <span id="selectdisplay"></span></div>
<h3>Кнопки</h3>
<div>
<span class="ms">Выборка {'select to 115}, "#newword"</span>
<button
onclick=#jet/ajax(
'showVals,
map/s {'select to 115},
"#newword")>
Показать значения</button>
</div>
<br/>
<div>
<span class="ms">Выборка {'select to 120}, "$newword"</span>
<button
onclick=#jet/ajax(
'showVals,
map/s {'select to 120},
"$newword")>
Показать значения</button>
</div>
<br/>
<div>
<span class="ms">Выборка {'select to 125}, (".param", "!d.scroll")</span>
<button
onclick=#jet/ajax(
'showVals,
map/s {'select to 125},
(".param", "!d.scroll"))>
Показать значения
</button>
</div>
</div>
<h3>Динамическая ссылка</h3>
<div class="small">
href=#jet/pct;jet/call('syncVals, map/s {'select to 777}, ".param")
</div>
<a href=#jet/call('syncVals, map/s {'select to 7}, (".param", "!d.scroll"))>
Передать значения {'select to 7}, (".param", "!d.scroll") на новую страницу
</a>
<hr/>
<!-- сюда метод showVals вставляет текущие значения,
полученные с помощью кнопок -->
<div id="showvalues" ></div>
</div>
jet/out: view/page(html, "Libretto")
}
// Метод вставляет текущее содержимое строки текстового ввода на страницу,
// и очищает саму строку
def insertWord = {
fix word = this.jet/s('newword)
// инструкции корректировки текущей страницы клиента
jet/append("#words", <div>#{word}</div>). // инструкция добавления текста
jet/val("#newword", "") // инструкция очищения строки ввода
}
// Метод, публикующий текущие значения элементов,
// выбранных при нажатии кнопок
def showVals = {
fix newword = this.jet/s('newword)
fix radio = this.jet/s('radio)
fix select = this.jet/s('select)
fix scroll = this.jet/s("d.scroll")
jet/subst("#showvalues", <div> // инструкция замены текста в элементе
#{
(<div>newword – #{newword.*text/join(", ")}</div>,
<div>radio – #{radio.*text/join(", ")}</div>,
<div>select – #{select.*text/join(", ")}</div>,
scroll.<div>d.scroll – #{$}</div>)
}
</div>)
}
// Метод обрабатывает нажатие гиперссылки с передачей динамических параметров
def syncVals = {
fix newword = this.jet/s('newword)
fix radio = this.jet/s('radio)
fix select = this.jet/s('select)
fix scroll = this.jet/s("d.scroll")
// загрузка новой страницы на клиента
jet/out:
<div>
#{
(<div>newword – #{newword.*text/join(", ")}</div>,
<div>radio – #{radio.*text/join(", ")}</div>,
<div>select – #{select.*text/join(", ")}</div>,
scroll.<div>d.scroll – #{$}</div>)
}
</div>
}
// метод публикации динамических значений элементов.
def display = {
fix type = this.jet/s('type)
fix scroll = this.jet/s("d.scroll")
type. {
case 'radio => jet/subst("#radiodisplay", this.jet/s('radio))
case 'select => jet/subst("#selectdisplay", this.jet/s('select))
case 'text => jet/subst("#textdisplay", this.jet/s('newword))
case 'checkbox =>
jet/subst("#checkboxdisplay", this.jet/s('newword).*text/join(", "))
case _ => jet/alert("???")
}
}