<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"  href="/xslt/final.xslt"?><html>
  <head>
    <title>9.3 ExtJS: Форма. Submit</title>
    <meta name="css" content="/doc/ext/ext_examples.css"/>
    <meta name="js" content="/js/EXT4/ext-all.js;/doc/ext/720.js"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="id" content="59"/>
    <link rel="stylesheet" type="text/css" href="/doc/ext/ext_examples.css"/>
    <link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.xml"/>
  </head>
  <body>
    <div class="main">
      <div class="wrap">
        <div class="L">
          <h1><a href="/">..</a> / 9.3 ExtJS: Форма. Submit</h1>
          <ol class="tags big">
            <li>
              <a href="/ExtJS-4">ExtJS-4</a>
            </li>
          </ol>
          <div class="myContent"><p>
  Добрый автор книги «Ext JS 3.0 Cookbook» <u class="external" title="www.packtpub.com/ext-js-30-cookbook/book">выложил</u> в
  открытый доступ главу из своей книги, посвященную формам. Пример
  сабмита из этой книжки, с небольшими модификациями, я и
  использовал, снабдив его комментариями.
</p>
<pre class="brush: js">
    new Ext.form.FormPanel({ // инициализация панели с формой.
        bodyStyle:'padding: 10px',
        width:400,
        renderTo: 'ex0', // результат поместить в контейнер с ID='ex0'
        id: 'login-form',   // ID панели. Он понадобится для сабмита формы
        bodyStyle: 'padding:15px;',
        url:'test.php', // url по которому будет оправлена форма
        items: [            // массив полей формы
                {   xtype: 'textfield',
                    fieldLabel: 'Login',
                    name: 'login'           // имя поля &lt;input name=«login»

                },
                {
                    xtype: 'textfield',
                    name: 'pass',           // имя поля &lt;input name=«pass»
                    fieldLabel: 'Password',
                    inputType: 'password'   // Не просто  textfield, а  password

                }],
          buttons: [{                         // набор кнопок. Здесь она всего одна
                    text: 'Login',
                    handler: function()
                      { Ext.getCmp('login-form')    // По ID адресуемся к панели
                            .getForm()              // берем форму
                            .submit();
                    }}]
        });
</pre>
<p>
  Для отправления сообщения в форму ввели кнопку, на которую
  навесили функцию отвечающую за отправление данных формы.
  рассмотрю по шагам
</p>
<ol>
  <li>Сначала определяется форма, которую нужно засабмитить. При
  инициализации этой форме указали свой внутренний ID
  компонента<br/>
    <em>id: 'login-form',</em><br/>
    И теперь к этому компоненту можно обратиться следующим
    образом:<br/>
    <em> Ext.getCmp('login-form')</em><br/>
    т.е. getCmp посволяет получить компонент по id
  </li>
  <li>Из полученного компонента вытаскиваем форму<br/>
    <em> Ext.getCmp('login-form').getForm()</em>
  </li>
  <li>Вызываем метод submit формы. Пока я не задал параметры и
  результат действия формы можно наблюдать только в FireBug'e
  на вкладке «Сеть». ПРи нажатии на кнопку данные отправляются и
  какой-то ответ получается. Но результат уже есть - данные
  отправляются. Далее рассмотрю как получать и обрабатывать эти
  данные.
  </li>
</ol>
<div id="ex0" style="margin-bottom:16px;"/>
<h2>
   2. Обработка отклика
</h2>
<p>
  Теперь можно рассмотреть рассмотреть подробнее параметры Submit.
  Ниже я приведу только ту часть кода, которая изменилась.
</p>
<pre class="brush: js">
.getForm()              // берем форму
.submit({               // сабмитим
        success:        // устанавливаем обработчик норм. завершения
           function(form, action){
               //  action.result - json отклик сервера Ext.Msg.alert(action.result.msg);
                                                   },
        failure:            // устанавливаем обработчик ошибки
                function(form, action){ Ext.Msg.alert(action.result.msg);
           }
});

</pre>
<p>
  В качестве данных передается объект, в котором указаны действия,
  которые отвечают за получение отклика сервера<br/>
  success - удачный результат;<br/>
  failure - неудачный результат;<br/>
  До кучи среди параметров Submit можно задать какие-то
  дополнительные параметры, URL который перекрывает тот, что задан
  в форме, методы отправки (post,get), заголовки (headers) и др.
  Подробнее, <u class="external" title="docs.sencha.com/ext-js/4-0/#%21/api/Ext.form.Basic">см
  документацию</u>.
</p>
<p>
  Сервер должен прислать нечто в формате JSON, в котором в качестве
  подтверждения должно быть свойство «success», которое
  свидетельствует о том что обработка прошла.<br/>
  Пример отклика сервера об успешной обработке:
</p>
<pre class="brush: js">
{success:true,myFirstMsg:'OK!'}
</pre>
<div id="ex1" style="margin-bottom:16px;"/>
<p>
  Пример отклика сервера об ошибке:
</p>
<pre class="brush: js">
{success:false,msg:'Error for example!'}
</pre>
<p>
  Через failure так же можно передавать поля, которые заполнены с
  ошибкой и соответствующие тексты сообщения об ошибке. Но это
  отдельная тема, которую буду рассматривать в следующей части.
</p>
<p>
  Если сервер в момент запроса обвалился, результат все равно
  поступит на failure.
</p>
<div id="ex2" style="margin-bottom:16px;"/>
<h2>
  Далее
</h2>
<ol>
  <li>
    <a href="/60.htm">Деревья в ExtJS. Часть 1. Инициализация</a>
  </li>
  <li>
    <a href="/61.htm">Деревья в ExtJS. Часть 2. Drag &amp; Drop /
    Навигация / Манипуляции c узлами</a>
  </li>
  <li>
    <a href="/62.htm">Навигация по DOM. Часть 1</a>
  </li>
  <li>
    <a href="/63.htm">Навигация по DOM. Часть 2</a>
  </li>
  <li>
    <a href="/64.htm">Манипуляции с DOM. Часть 1. Установка/чтение
    стилей, классов, атрибутов</a>
  </li>
  <li>
    <a href="/65.htm">Манипуляции с DOM. Часть 2.
    Добавление/удаление и пр. операции с узлами</a>
  </li>
</ol></div>
          <ol class="tags big">
            <li class="date">2011-12-04</li>
            <li>
              <a href="/ExtJS-4">ExtJS-4</a>
            </li>
          </ol>
          <ol class="see">
            <li>
              <a href="#"><span>www.packtpub.com/ext-js-30-cookbook/book</span> - <b>packtpub.com Ext JS 3.0 Cookbook — Load, Validate, and Submit Forms</b></a>
            </li>
            <li>
              <a href="#"><span>docs.sencha.com/ext-js/4-0/#%21/api/Ext.form.Basic</span> - <b>Полный список параметров для Submit</b></a>
            </li>
            <li>
              <a href="#"><span>www.quizzpot.com/2009/10/ext-js-basic-forms-and-fields/</span> - <b>quizzpot.com ExtJS basic forms and fields</b></a>
            </li>
            <li>
              <a href="#"><span>www.sencha.com/learn/a-basic-login/</span> - <b>sencha / Learn / Ext JS A Basic Login</b></a>
            </li>
            <li>
              <a href="#"><span>docs.sencha.com/ext-js/4-0/#!/api</span> - <b>Form API на официальном сайте</b></a>
            </li>
          </ol>
          <ul class="comment"/>
        </div>
      </div>
      <div class="R">
        <a href="/" title="&#x41D;&#x430; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x443;&#x44E;"/>
      </div>
    </div>
    <div id="li"/>
  </body>
</html>

