<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"  href="/xslt/final.xslt"?><html>
  <head>
    <title>8.4 ExtJS: GridPanel — табличка с редактированием полей (продолжение)</title>
    <meta name="css" content="/doc/ext/ext_examples.css"/>
    <meta name="js" content="/js/EXT4/ext-all.js;/doc/ext/630.js"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="id" content="56"/>
    <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> / 8.4 ExtJS: GridPanel — табличка с редактированием полей (продолжение)</h1>
          <ol class="tags big">
            <li>
              <a href="/ExtJS-4">ExtJS-4</a>
            </li>
          </ol>
          <div class="myContent"><p>
  Немного модифицирую <a href="/55.htm">предыдущий пример</a>.
  Модификация будет заключаться в следующем:
</p>
<ol>
  <li>Вместо редактирования построчно, редактироваание будет
  вестись отедльно в каждой ячейке
  </li>
  <li>Синхронизация измененийa будет выполняться не автоматически а
  по нажатию на кнопку «Save»
  </li>
  <li>Кнопка удаления будет размещена в каждой строке.
  </li>
</ol>
<p>
  Поехали.
</p>
<h2>
   1. Раздельное редактирование ячеек
</h2>
<p>
  Все изменение заключается в подгрузке другого плагина. Вместо
  Ext.grid.plugin.<strong>Row</strong>Editing -
  Ext.grid.plugin.<strong>Cell</strong>Editing:
</p>
<pre class="brush: js">
var Editing = Ext.create('Ext.grid.plugin.CellEditing');
</pre>
<h2>
   2. Синхронизация изменений
</h2>
<p>
  За автосинхронизацию отвечает свойство autoSync в хранилище. Его
  в данном случае нужно отключить
</p>
<pre class="brush: js">
var store = Ext.create('Ext.data.Store', {
    autoLoad: true,
    autoSync: false, // указание на автосохранения в хранилище
                    // при каждом изменении одно записи
………………………………………………..
</pre>
<p>
  После отключения автосинхронизации нужно озаботиться о кнопке, по
  нажатию на которую будет производиться синхронизация. Эту кнопку
  я размещу в верхнем тулбаре там где размещал их в предыдущем
  примере. Неюзабельно, но для примера сойдет.
</p>
<pre class="brush: js">
tbar: [  // верхний тулбар с кнопками
……………………………….
        {
          text: 'save',
          handler: function(){    // обработчик события нажатия кнопки
               grid.store.sync(); // синхронизация
          }
      }
    ]
</pre>
<p>
  На этом синхронизацию изменений можно в принципе считать готовой.
  Но нужно учесть, что все правки будут пересылаться отдельными
  запросами. ExtJS позволяет пакетноую отправку запросов, но мне
  это делать было лень. Подробности пакетной обработки лучше
  рассмотреть в <u class="external" title="docs.sencha.com/ext-js/4-0/#%21/example/writer/writer.html">
  оригинальном примере</u>. Или в документации свойство<u class="external" title="docs.sencha.com/ext-js/4-0/#%21/api/Ext.data.proxy.Rest-cfg-batchActions">
  Ext.data.proxy.Rest.batchActions</u>
</p>
<h2>
   3. Перенос кнопок
</h2>
<p>
  В подобных табличках (например список статей в CMS) в правую
  колонку выносят наиболее распространенны элементы управления. В
  этом примере я вынесу кнопку удаления из верхнего тулбара в
  отдельную колонку. По сравнению с предыдущим примером изменится
  только описание колонок таблички
</p>
<pre class="brush: js">
 var grid = Ext.create('Ext.grid.Panel', {
………………………………………….
columns: [
  {
    xtype:'actioncolumn', // специальный тип колонки в ExtJS для всяких кнопок
      width:50,
      items: [ // массив кнопок. в примере кнопка единственная, но может быть и  много.
        {
          icon: '/images/ext/delete.png', // иконка
          tooltip: 'Delete',              // подсказка
          handler: function(grid, rowIndex, colIndex) { // обработчик нажатия кнопки
                        var rec = grid.getStore().getAt(rowIndex);  // определяю удаляемую запись по номеру строки
                        grid.store.remove(rec);                     // удаляю запись.

          }
      }]

  }
  ],
………………………………………….
</pre>
<p>
  На этом все. Пример малоюзабелен, но вполне себе работает:
</p>
<div id="ex1"/>
<h2>
  Далее
</h2>
<ol>
  <li>
    <a href="/57.htm">Form. Часть 1 - простые компооненты</a>
  </li>
  <li>
    <a href="/58.htm">Form. Часть 2 - составные компоненты</a>
  </li>
  <li>
    <a href="/59.htm">Form. Часть 3 - Submit</a>
  </li>
  <li>
    <a href="/60.htm">Деревья в ExtJS. Часть 1. Инициализация</a>
  </li>
  <li>
    <a href="/61.htm">Деревья в ExtJS. Часть 2. Drag &amp; Drop /
    Навигация / Манипуляции c узлами</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.sencha.com/learn/the-grid-component/</span> - <b>sencha.com: Learn  The Grid Component</b></a>
            </li>
            <li>
              <a href="#"><span>net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/</span> - <b>Working with RESTful Services in CodeIgniter</b></a>
            </li>
            <li>
              <a href="#"><span>www.softcoder.ru/blog/rest-php</span> - <b>Подход REST в PHP</b></a>
            </li>
            <li>
              <a href="#"><span>freehabr.ru/blog/extjs/705.html</span> - <b>ExtJS4 The Data Package  (перевод официальной документации)</b></a>
            </li>
            <li>
              <a href="#"><span>habrahabr.ru/blogs/php/46032/</span> - <b>RESTful PHP — 5 простых советов</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>

