<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"  href="/xslt/final.xslt"?><html>
  <head>
    <title>13. Шаблоны в ExtJS</title>
    <meta name="css" content="/doc/ext/ext_examples.css"/>
    <meta name="js" content="/js/EXT4/ext-all.js;/doc/ext/170.js"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="id" content="66"/>
    <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> / 13. Шаблоны в ExtJS</h1>
          <ol class="tags big">
            <li>
              <a href="/ExtJS-4">ExtJS-4</a>
            </li>
          </ol>
          <div class="myContent"><p>
  Мода на изобретение шаблонизаторов, процветающая среди
  php-программистов плавно переползла в Python и Ruby, и 2-3 года
  назад в JavaScript. Я думаю, в скором будущем в JS следует
  ожидать портирования Smarty, Quicky,FastTemplate, TAL… и базаров,
  какой шаблонизатор лучше.
</p>
<h2>
   1. Первый шаблон
</h2>
<pre class="brush: js">
var d=['Путин', 'Владимир', 'Владимирович'];
var tpl= new Ext.Template(«&lt;div class='domexample'&gt;&lt;b&gt;{0}&lt;/b&gt; {1} {2}&lt;/div&gt;»); tpl.append('ex1', d); tpl.append('ex1',['Медведев', 'Владимир', 'Владимир']);

</pre>
<p>
  Здесь наверное все прозрачно? В первой строке создается шаблон.
  Во втрой строке находится элемент c id='ex1', куда будет
  вставлен результат работы шаблона.<br/>
  Затем в шаблон подставляюся данные из массива. {0} - первый
  элемент массива, {1} - второй и т.д. В результате получаем:
</p>
<div id="ex1" class="domexample"/>
<p>
  Так же как и в PHP-шаблонизаторах типа Smarty для ускорения
  работы шаблонов их можно «скомпилировать», т.е. перевети в
  какой-то внутренний объект, с помощь которого парсинг будет
  выполняться быстрее.
</p>
<pre class="brush: js">
tpl.compile(); // «компиляция» шаблона tpl.append('ex2',['Жириновский', 'Владимир', 'Владимирович']);
</pre>
<div id="ex2" class="domexample"/>
<p>
  Естественно, что можно парсить не только массивы но и литерально
  заданные объекты (JSON):
</p>
<pre class="brush: js">
 var tpl3=new Ext.Template(«&lt;div class='domexample'&gt;&lt;b&gt;{f}&lt;/b&gt; {i} {o}&lt;/div&gt;»);
  tpl3.append('ex3',{f:'Зюганов', i:'Владимир', o:'Владимирович'});
</pre>
<div id="ex3" class="domexample" style="margin-bottom:1em;"/>
<h2>
   2. Циклы в шаблонах
</h2>
<p>
  Естественно, что в шаблонах предусмотрены циклы. По счастью, они
  сделаны не в виде JS-вставок, а а виде собственных тегов. Простой
  пример:
</p>
<pre class="brush: js">
var data = {
        text: 'Президиум',
        member: [{name: 'Путин В.В.',   member: 'председатель партии «Единая Россия»',age:58},
                {name: 'Жириновский В.В.',      member: 'Генеральный секретарь ЛДПР',age:68},
                {name: 'Зюганов В.В.',          member: 'председатель Президиума ЦК КПРФ(б)',age:66}]
        };
var tpl4 = new Ext.XTemplate(
                                '&lt;b&gt;{text}:&lt;/b&gt;',
                                '&lt;tpl for=«member»&gt;', // начало цикла для массива member
                                        '&lt;p&gt;{#}  {name} ({member})&lt;/p&gt;',
                                '&lt;/tpl&gt;'                  // конец цикла
                        );
tpl4.append('ex4',data);

</pre>
<div id="ex4" class="domexample" style="margin-bottom:1em;"/>
<h2>
   3. Условные операторы в шаблонах
</h2>
<p>
  Точно так же как и циклы при помощи тегов &lt;tpl&gt; в шаблоны
  вводятся условия. Ниже приведен пример только одного шаблона. Из
  тех же данных что и в предыдущем примере введем ограничение по
  возрасту
</p>
<pre class="brush: js">
var tpl5 = new Ext.XTemplate(
                                '&lt;b&gt;{text}:&lt;/b&gt;',
                                '&lt;tpl for=«member»&gt;',             // начало цикла для массива member
                    '&lt;tpl if=«age&lt; 60»&gt;',      //  ограничение по возрасту
                                        '&lt;p&gt;{#}  {name} ({member})&lt;/p&gt;',
                    '&lt;/tpl&gt;',
                                '&lt;/tpl&gt;'                  // конец цикла
                        );


</pre>
<div id="ex5" class="domexample" style="margin-bottom:1em;"/>
<h2>
   4. И еще
</h2>
<p>
  и еще в шаблонах наворочено много всякого - вычисление
  переменных, встроенные функции и т.п. До кучи в самом классе
  <u class="external" title="docs.sencha.com/ext-js/4-0/#%21/api/Ext.XTemplate">Ext.Template</u>
  22 метода. Но об этом лучше читать в документации.
</p>
<h2>
  Далее
</h2>
<ol>
  <li>
    <a href="/67.htm">События в ExtJS</a>
  </li>
</ol></div>
          <ol class="tags big">
            <li class="date">2011-12-11</li>
            <li>
              <a href="/ExtJS-4">ExtJS-4</a>
            </li>
          </ol>
          <ol class="see">
            <li>
              <a href="#"><span>docs.sencha.com/ext-js/4-0/#!/api/Ext.XTemplate</span> - <b>sencha.com Ext.XTemplate</b></a>
            </li>
            <li>
              <a href="#"><span>www.sencha.com/learn/template-faq/</span> - <b>sencha.com: Template FAQ</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>

