Web2py - Добавление эффектов Ajax

В этой главе мы обсудим примеры интеграции jQuery плагины с web2py. Эти плагины помогают сделать формы и таблицы более интерактивными и удобными для пользователя, тем самым повышая удобство использования вашего приложения.

В частности, мы узнаем

  • как улучшить раскрывающийся список с множественным выбором с помощью интерактивной кнопки выбора,

  • как заменить поле ввода ползунком и

  • как отображать табличные данные с помощью jqGrid и WebGrid.

Хотя web2py является серверным компонентом разработки, welcome приложение для строительных лесов включает в себя базу jQueryбиблиотека. Это каркасное приложение web2py "welcome" включает файл с именемviews/web2py_ajax.html.

Содержание представления следующее -

<script type = "text/javascript"><!--

   // These variables are used by the web2py_ajax_init function in web2py_ajax.js 
      (which is loaded below).
		
   var w2p_ajax_confirm_message = "{{= T('Are you sure you want to delete this object?')}}";
   var w2p_ajax_disable_with_message = "{{= T('Working...')}}";
   var w2p_ajax_date_format = "{{= T('%Y-%m-%d')}}";
   var w2p_ajax_datetime_format = "{{= T('%Y-%m-%d %H:%M:%S')}}";
   
   var ajax_error_500 = '{{=T.M('An error occured, please [[reload %s]] the page') %
	
      URL(args = request.args, vars = request.get_vars) }}'
		
//--></script>

{{
   response.files.insert(0,URL('static','js/jquery.js'))
   response.files.insert(1,URL('static','css/calendar.css'))
   response.files.insert(2,URL('static','js/calendar.js'))
   response.files.insert(3,URL('static','js/web2py.js'))
   response.include_meta()
   response.include_files()
}}

Файл состоит из реализации JavaScript и AJAX. web2py не позволит пользователю использовать другие библиотеки AJAX, такие как Prototype, ExtJS, потому что всегда отмечается, что такие библиотеки проще реализовать.

Эффекты JQuery

Рендеринг по умолчанию <select multiple = "true">..</select>считается не очень интуитивно понятным в использовании, в частности, когда необходимо выбрать несмежные параметры. Это нельзя назвать недостатком HTML, это плохой дизайн большинства браузеров. Представление множественного выбора можно перезаписать с помощью JavaScript. Это можно реализовать с помощью плагина jQuery под названиемjquery.multiselect.js.

Для этого пользователю необходимо скачать плагин. jquery.muliselect.js из http://abeautifulsite.net/2008/04/jquery-multiselect, и поместите соответствующие файлы в static/js/jquery.multiselect.js и static/css/jquery.multiselect.css.

пример

Следующий код должен быть добавлен в соответствующее представление перед {{extend ‘layout.html’}}

{{
   response.files.append('https://ajax.googleapis.com/ajax\
      /libs/jqueryui/1.8.9/jquery-ui.js')
   
   response.files.append('https://ajax.googleapis.com/ajax\
      /libs/jqueryui/1.8.9/themes/ui-darkness/jquery-ui.css')
   
   response.files.append(URL('static','js/jquery.multiSelect.js'))
   response.files.append(URL('static','css/jquery.\multiSelect.css'))
}}

Поместите следующее после {{extend 'layout.html'}} -

<script>
   jQuery(document).ready(function(){jQuery('[multiple]').multiSelect();});
</script>

Это поможет стилизовать multiselect для данной формы

Контроллер

def index():
   is_fruits = IS_IN_SET(['Apples','Oranges','Bananas','Kiwis','Lemons'], multiple = True)
   form = SQLFORM.factory(Field('fruits','list:string', requires = is_fruits))
   
   if form.accepts(request,session):response.flash = 'Yummy!'
return dict(form = form)

Это действие можно попробовать со следующим представлением -

{{
   response.files.append('https://ajax.googleapis.com/ajax\
      /libs/jqueryui/1.8.9/jquery-ui.js')
   
   response.files.append('https://ajax.googleapis.com/ajax\
      /libs/jqueryui/1.8.9/themes/ui-darkness/jquery-ui.css')
   
   response.files.append(URL('static','js/jquery.multiSelect.js'))
   response.files.append(URL('static','css/jquery.\multiSelect.css'))
}}

{{extend 'layout.html}}
<script>
   jQuery(document).ready(function(){jQuery('[multiple]'). multiSelect();});
</script>
{{= form}}

Снимок экрана вывода выглядит следующим образом -

Некоторые из полезных событий JQuery перечислены в следующей таблице -

Sr.No. Событие и использование
1

onchange

запускаться при изменении элемента

2

onsubmit

для запуска при отправке формы

3

onselect

запускаться при выборе элемента

4

onblur

запускаться, когда элемент теряет фокус

5

onfocus

запускаться, когда элемент получает фокус

JQuery и Ajax-jqGrid

jqGrid - это элемент управления JavaScript с поддержкой Ajax, созданный на основе jQuery, который предоставляет решение для представления и управления табличными данными. jqGrid - это клиентское решение, которое динамически загружает данные через обратные вызовы Ajax, обеспечивая разбивку на страницы, всплывающее окно поиска, встроенное редактирование и т. д.

jqGrid интегрирован в PluginWiki, но здесь мы обсуждаем его как отдельную программу для программ web2py, которые не используют этот плагин. jqGrid заслуживает отдельной книги, но здесь мы обсудим только его основные функции и простейшую интеграцию.

Синтаксис jqGrid будет следующим:

def JQGRID(
   table, fieldname = None,
   fieldvalue = None, col_widths = [],
   colnames = [], _id = None, fields = [],
   col_width = 80, width = 700,
   height = 300, dbname = 'db'
):