Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Совет по XForms: Сочетание технологии Ajax и XForms

Никлас Чейз, Независимый автор, Backstop Media
Никлас Чейз (Nicholas Chase) участвовал в разработке Web-сайтов для таких компаний, как Lucent Technologies, Sun Microsystems, Oracle и Tampa Bay Buccaneers. Ник успел побывать школьным учителем физики, редактором электронного научно-фантастического журнала, инженером в области мультимедиа, инструктором по Oracle и главным инженером в интерактивной коммуникационной компании. Он является автором нескольких книг, в том числе XML Primer Plus (Sams).

Описание:  Асинхронный JavaScript™ и XML, или Ajax, в последнее время будоражит веб, поскольку он позволяет веб-дизайнерам создавать приложения, реагирующие на действия пользователя без перезагрузки страницы целиком. Такая возможность изначально присутствовала в XForms. В этом совете рассматриваются обе технологии: XForms и Ajax, а также способы комбинирования этих двух подходов. Вы можете найти множество ресурсов, помимо этого, которые обучают тому, как создавать Ajax запросы, но XForms решают несколько иные задачи и предоставляют особые возможности в использовании данных после их получения.

Больше статей из этой серии

Дата:  03.10.2006
Уровень сложности:  средний
Активность:  2155 просмотров
Комментарии:  


Протестированные браузеры

Описанные в данном совете примеры XForms были протестированы при помощи Firefox 1.5 (с установленным расширением XForms) и Microsoft Internet Explorer 6 с установленным элементом управления Formsplayer. Файл для загрузки содержит XHTML-файл для Firefox и HTML-файл для IE.

Приложение

XForms предоставляет свою собственную версию Ajax, в которой у вас есть возможность замещать данные, определяющие содержимое страницы, без перезагрузки страницы целиком. Рассмотрим, например, страницу с фрагментами ковбойских мудростей. Данные могут выглядеть так, как показано в листинге 1.


Листинг 1. Пример данных
				
<pearls>
   <pearl>
      Never ask a barber if he thinks you need a haircut.
   </pearl>
   <pearl>
      Making it in life is kind of like busting broncos. You're 
going to get thrown a lot. The simple secret is to keep getting 
back on.
   </pearl>
   <pearl>
      Never miss a good chance to shut up.
   </pearl>
   <pearl>
      The quickest way to double your money is to fold it over and 
put it back in your pocket.
   </pearl>
</pearls>

Загляните в ресурсный центр Ajax - магазин, где вы сможете найти информацию модели программирования Ajax, в частности, статьи и руководства, конференции, блоги, wiki, информацию о происходящих событиях и новости. Все, что происходит в мире Ajax, освещается здесь.

Далее вы можете создать форму примерно так, как показано ниже (см. листинг 2).


Листинг 2. Форма
				
<?xml version="1.0" encoding="ASCII"?>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ev="http://www.w3.org/2001/xml-events" 
xmlns:xforms="http://www.w3.org/2002/xforms">
  <head>
    <title>Instance Data-To-XHTML/XForms Example</title>
    <xforms:model id="model_pearls">
      <xforms:instance id="instance_model_pearls" src="wisdom.xml"/>
      <xforms:submission id="submit_model_pearls" 
          action="http://localhost/newwisdom.xml"
          method="post" replace="instance"
				instance="instance_model_pearls"/>
    </xforms:model>
    <link href="gen_default.css" rel="stylesheet"/>
  </head>
  <body>
  
<h1>Cowboy Wisdom</h1>
   
    <xforms:output id="thePearl" ref="/pearls/pearl[2]" 
                     model="model_pearls" />

    <xforms:submit submission="submit_model_pearls">
      <xforms:label>Get new sayings</xforms:label>
    </xforms:submit>
  </body>
</html>

В результате у вас получится страница как на рисунке 1.


Рисунок 1. Основная страница
Основная страница

Заметьте, что атрибут ref для элемента output является утверждением XPath, которое содержит позицию. При помощи этого XPath утверджения, вы можете задавать то, что будет отображаться на странице.

Также вы можете управлять страницей, управляя фактическими данными. Как вы уже наверное заметили в листинге 1, часть выделенного жирным текста является информацией из элемента submission. Здесь вы дали указание движку XForms заменять не всю страницу целиком, а только отдельную сущность. Посланный в URL запрос будет возвращать ту же структуру, но с другими данными, и вы моментально будете получать новые данные. Например, если вы нажмете на кнопку Submit, браузер загрузит другой документ, а поскольку утверждение output всегда должно выводиться на определенной позиции, эта же позиция определена для данных, которые теперь заполняют форму, что вы и видите на рисунке 2.


Рисунок 2. Замещение части страницы
Замещение части страницы

Когда вам непременно нужно использовать скрипт

Однако, в некоторых случаях вы будете использовать JavaScript, нравится вам это или нет. Предположим, вы имеете дело с данными, которые перед использованием должны быть каким-то образом преобразованы или приходят с сайта, которым вы не управляете. Единственный вариант работы с этими данными - это получать их, используя JavaScript, после чего добавлять их на страницу.

Суть в том, что вы не можете добавить данные в элемент напрямую, таким образом, чтобы получилась простая HTML страница. Вместо этого вам нужно поместить информацию в отдельную сущность, а затем работать с утверждением XPath, которое определит содержимое контроля XForms.

Например, можно добавить вторую кнопку на страницу, для того, чтобы проматывать высказывания (см. листинг 3).


Листинг 3. Добавление скрипта
				
...
  <body>
  
<h1>Cowboy Wisdom</h1>
   
  <script type="text/javascript">
      var whichPearl = 0;
      function choosePearl(){
          if (whichPearl == 0) {
            whichPearl = 1;
          } else if (whichPearl == 1) {
            whichPearl = 2;
          } else if (whichPearl == 2) {
            whichPearl = 3;
          } else if (whichPearl == 3) {
            whichPearl = 0;
          }
          refString = "/pearls/pearl["+whichPearl+"]";
          theTarget = document.getElementById("thePearl");
          theTarget.setAttribute("ref", refString);
      }
  </script>
  
 
      <xforms:output id="thePearl" ref="/pearls/pearl[2]"       
                                 model="model_pearls" />

      <form>
          <input type="button" value="Change saying" 
                                onclick="choosePearl();" />
      </form>

    <xforms:submit submission="submit_model_pearls">
      <xforms:label>Get new sayings</xforms:label>
    </xforms:submit>
  </body>
</html>

Сама по себе функция простая: цикл по числовым значениям. В реальном приложении это мог бы быть скрипт, в котором вы осуществляете Ajax запросы и работаете с возвращенными в результате его обработки данными. Для каждого значения индекса вы создаете новый текст, который записывается в атрибут ref для элемента thePearl.

Нужно еще добавить from which для вызова скрипта. Теперь если вы перезагрузите страницу, кнопка появится, и вы сможете нажать на нее, атрибут ref поменяется, страница автоматически изменит данные в соответствие с утверждением XPath, как показано на рисунке 3.


Рисунок 3. Новый скрипт
Новый скрипт

Резюме

XForms сами по себе обеспечивают подобные Ajax возможности, при которых вы можете изменять данные на странице без перезагрузки самой страницы. С другой стороны, если вам необходимо использовать скрипт, вы можете управлять XML данными, которые определяют, на что будет похожа форма XForms, то есть все изменения будут основаны на внешних данных.



Загрузка

ОписаниеИмяРазмерМетод загрузки
примеры XForms с применением Ajaxxforms_ajax_source.zip4KBHTTP

Информация о методах загрузки


Ресурсы

Об авторе

Никлас Чейз (Nicholas Chase) участвовал в разработке Web-сайтов для таких компаний, как Lucent Technologies, Sun Microsystems, Oracle и Tampa Bay Buccaneers. Ник успел побывать школьным учителем физики, редактором электронного научно-фантастического журнала, инженером в области мультимедиа, инструктором по Oracle и главным инженером в интерактивной коммуникационной компании. Он является автором нескольких книг, в том числе XML Primer Plus (Sams).

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML
ArticleID=174475
ArticleTitle=Совет по XForms: Сочетание технологии Ajax и XForms
publish-date=10032006
author1-email=ibmquestions@nicholaschase.com
author1-email-cc=troy@backstopmedia.com

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).