Postbacks
=========
Клиентами веб приложения могут быть:
* другие приложения или устройства: например, RESTful APIs которое широко используется смартфонами, другими веб сайтами
* люди: например, интерактивные веб сайты предполагающие сложные взаимодействия
Как фреймворк, Xitrum нацелен на создание легких решений для этих задача.
Для решения первой задачи, используются :doc:`RESTful контроллеры `.
Для решения второй задачи, в том числе существует возможность использовать postback.
Подробнее о технологии postback:
* http://en.wikipedia.org/wiki/Postback
* http://nitrogenproject.com/doc/tutorial.html
Реализация в Xitrum's сделана в стиле `Nitrogen `_.
Шаблон
------
AppAction.scala
::
import xitrum.Action
import xitrum.view.DocType
trait AppAction extends Action {
override def layout = DocType.html5(
{antiCsrfMeta}
{xitrumCss}
{jsDefaults}
Welcome to Xitrum
{renderedView}
{jsForView}
)
}
Форма
-----
Articles.scala
::
import xitrum.annotation.{GET, POST, First}
import xitrum.validator._
@GET("articles/:id")
class ArticlesShow extends AppAction {
def execute() {
val id = param("id")
val article = Article.find(id)
respondInlineView(
{article.title}
{article.body}
)
}
}
@First // Этот маршрут будет обработан перед "show"
@GET("articles/new")
class ArticlesNew extends AppAction {
def execute() {
respondInlineView(
)
}
}
@POST("articles")
class ArticlesCreate extends AppAction {
def execute() {
val title = param("title")
val body = param("body")
val article = Article.save(title, body)
flash("Article has been saved.")
jsRedirectTo(show, "id" -> article.id)
}
}
При возникновении события ``submit`` формы, состояние формы будет отправлено на сервер в контроллер ``ArticlesCreate``.
Атрибут ``action`` формы зашифрован. Зашифрованный URL выступает в роли anti-CSRF токена.
Другие элементы (не формы)
--------------------------
Postback может быть отправлен для любого элемента, не только для формы.
Вот пример для ссылки:
::
Logout
Переход по ссылке выполнит отправку состояния в LogoutAction.
Диалог подтверждения
--------------------
Отображение диалоговых окон подтверждения:
::
Logout
В случае отказа от продолжения (при нажатии кнопки "Cancel") postback не будет отправлен.
Дополнительные параметры
------------------------
В случае формы вы можете добавлять дополнительные поля `` item.id)}
data-params="_method=delete"
data-confirm={"Do you want to delete %s?".format(item.name)}>Delete
Или вы можете поместить дополнительные параметры в смежную форму:
::
Используйте селектор ``#myform`` для получения формы с дополнительными параметрами.
Отображение анимации во время Ajax загрузки
-------------------------------------------
By default, this animated GIF image is displayed while Ajax is loading:
.. Use ../img/ajax_loading.png for PDF (make latexpdf) because it can't include animation GIF
.. image:: ../img/ajax_loading.gif
To customize, please call this JS snippet after including ``jsDefaults`` (which includes
`xitrum.js `_)
in your view template:
::
// target: The element that triggered the postback
xitrum.ajaxLoading = function(target) {
// Called when the animation should be displayed when the Ajax postback is being sent.
var show = function() {
...
};
// Called when the animation should be stopped after the Ajax postback completes.
var hide = function() {
...
};
return {show: show, hide: hide};
};