<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"  href="/xslt/final.xslt"?><html>
  <head>
    <title>15. События в ExtJS (немного об ООП)</title>
    <meta name="css" content="/doc/ext/ext_examples.css"/>
    <meta name="js" content="/js/EXT4/ext-all.js;/doc/ext/26.js"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="id" content="67"/>
    <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> / 15. События в ExtJS (немного об ООП)</h1>
          <ol class="tags big">
            <li>
              <a href="/ExtJS-4">ExtJS-4</a>
            </li>
          </ol>
          <div class="myContent"><h2>
   1. События DOM 
</h2>
<p>
  Для событий связанных с DOM предусмотрен метод аналогичный
  jQuery.bind. Пример для обработки клика ниже:
</p>
<p>
   Ext.onReady(function(){<br/>
  var ex1=Ext.get(«ex1»);
  ex1.on(«click»,function(){alert('click');})<br/>
  // или так:<br/>
   Ext.EventManager.addListener(«ex1», 'click',function(){
  alert('click #2')});<br/>
  });<br/>
</p>
<p>
  Поскольку в примере введены два обработчика события они
  отработаются оба, точно так же как и в jQuery
</p>
<p>
  <button id="ex1"><strong>#ex1 click me</strong></button>
</p>
<p>
  Этот же метод позволяет вытащить информацию о самом событиии,
  источнике события и изменить ход события.<br/>
  В примере ниже обработчику события передаются два параметра. Один
  - <u class="external" title="docs.sencha.com/ext-js/4-0/#%21/api/Ext.EventObject">EventObject</u>,
  а другой - DOM-объект источника события. В примере я ввел
  ненужные в данном случае дополнительные операции по
  предотвращению всплывание события (stopPropagation), выполнения
  дефотлной операции клика (preventDefault), например при клике по
  ссылке можно предотвратить переход по этой ссылке и др.
</p>
<pre class="brush: js">
function handleClick(event, target){  // обработчик события
event.preventDefault();  // предотвращает событие навешанное по дефолту 
event.stopPropagation(); // предотвращает всплывание
event.stopEvent(); // это лишнее, оно предотвращает и всплывание  и дефолт  
var s= 'Target: '+target.innerHTML       // вытаскиваюя какую-то инфо о событии                         
        +'XY: ' + event.getPageX() +':' + event.getPageY();                       
        alert(s)         
}
var ex2 = Ext.get(«ex2»);  // ссылка на Ext.Element ex2.on(«click»,      // событие
     handleClick     // обработчик события
        );

</pre>
<p>
  Есть еще несколько вариантов форы записи этого метода, например:
</p>
<pre>
el.on(eventName, handler, scope,params);  
</pre>
<p>
  eventName - событие (click dblclick mousemove mouseout mouseover
  mousedown mouseup…)<br/>
  handler - функция обработччик события<br/>
  scope - контекст события (по умолчанию this)<br/>
  params - дополнительные параметры, которые могут в частности
  заменять функции stopEvent, preventDefault и т.д.
</p>
<p>
  Четвертым параметром передается объект, в котором ожно передать
  дополнительные параметры обработки, например:
</p>
<p>
   ex1.on('click', this.onClick, this, {preventDefault:
  true});<br/>
   ex1.on('click', this.onClick, this, {stopEvent:
  true});<br/>
   exl.on('click', this.onClick, this, {stopPropagation:
  true});<br/>
  // вызывать обработчик через 100 милисекунд<br/>
   el.on('click', this.onClick, this, {delay: 100});<br/>
  // не допускать вызова обработчика чаще чем раз в 100
  милисекунд<br/>
   el.on('click', this.onClick, this, {buffer: 100});
</p>
<p>
  <button id="ex2">#ex2 click me</button>
</p>
<h2>
   2. Собственные события<br/>
</h2>
<p>
  Помимо низкоуровневых событий, привязанных к DOM, ExtJS так же
  как и большинство других js-фреймворков (см. bind и trigger в
  jQuery), позволяет создавать собственные события, которые можно
  при необходимости вызвать программно. Делается это так:
</p>
<pre class="brush: js">
 // привязка событий myEvent1,myEvent2 
 // к какому нибудь объекту (компоненту) obj obj.addEvents( 'myEvent1', 'myEvent2' ); 
.. .. .. .. .. .. .. .. .. ..  
 //  описание обработчика события
 function myEvent1Listener(event, target, {params}){…}
.. .. .. .. .. .. .. .. .. .. 
 // вызов события из объекта (компонента) obj
 this.fireEvent('myEvent', this,  {params});

</pre></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.EventObject</span> - <b>API: Ext.EventObject — DOM события</b></a>
            </li>
            <li>
              <a href="#"><span>docs.sencha.com/ext-js/4-0/#!/api/Ext.EventManager-method-preventDefault</span> - <b>API: Ext.EventManager — собственные события Ext</b></a>
            </li>
          </ol>
          <ul class="comment">
            <li id="a672" title="a671">
              <a name="&#x432;&#x44B;&#x430;&#x44B;&#x430;&#x432;" title="" rel="18.12.11"/>
              <div>Помимо низкоуровневых событий, привязанных к DOM, ExtJS так же как и большинство других js-фреймворков (см. bind и trigger в jQuery), позволяет создавать собственные события, которые можно при необходимости вызвать программно. Делается это так:</div>
            </li>
            <li id="a693" title="a0">
              <a name="34563456" title="" rel="03.02.12"/>
              <div>Не могли бы вы расписать как из одного компонента вызвать событие в другом компонентя я ни хрена не понял :(</div>
            </li>
          </ul>
        </div>
      </div>
      <div class="R">
        <a href="/" title="&#x41D;&#x430; &#x433;&#x43B;&#x430;&#x432;&#x43D;&#x443;&#x44E;"/>
      </div>
    </div>
    <div id="li"/>
  </body>
</html>

