Три способа привязки к событиям с додзё. В чем именно разница? - PullRequest
0 голосов
/ 25 марта 2010

Разница здесь только в различных синтаксических сахарах или есть причина использовать один подход над другим?Все они работают, и, чтобы быть немного более запутанным, в чем разница между this и evt.currentTarget ?

CSS

#reportDetails table tr:hover td,
#reportDetails table tr.hover td  {
    background: #aae4e2;
    color: #333333;
}

Пример html

<div id="reportDetails">
   <table>
     <tr>
       <td> something</td>
       <td> soemthing else</td>
     </tr>
     <tr>
        <td> something2</td>
        <td> soemthing else2</td>
     </tr>
   </table>
 </div>

сценарий dojo.behavior

dojo.require("dojo.behavior");  
if (dojo.isIE <= 6) {
 dojo.behavior.add({
  '#reportDetails tr': {
   onmouseover: function(evt){ dojo.addClass(evt.currentTarget, "hover");},
   onmouseout: function(evt){dojo.removeClass(evt.currentTarget, "hover");
   }
  }
 });
}
dojo.behavior.apply();

сценарий dojo.query forEach

    if (dojo.isIE <= 6) {
 dojo.addOnLoad(function() {
  dojo.query("tr", "reportDetails").forEach(function(node){ 
   node.onmouseover=function(){dojo.addClass(node,"hover");}
   node.onmouseout=function() {dojo.removeClass(node,"hover");}
   }
  });
 });
}

dojo.query, привязанный непосредственно к событиям

    if (dojo.isIE <= 6) {
 dojo.addOnLoad(function(){
  dojo.query("tr", "reportDetails")
  .onmouseover(function(evt){dojo.addClass(evt.currentTarget, "hover");})
  .onmouseout(function(evt){dojo.removeClass(evt.currentTarget, "hover");});
 });
}

Я предполагаю, что evt.currentTarget и узел могут быть заменены на this и все еще работать.Я полагаю, что между 2 и 3 нет реальной разницы, но первый может действительно использовать другой подход.

1 Ответ

0 голосов
/ 30 марта 2010

Короче говоря: нет ничего особенного. Они все делают так, как задумано.

Используйте наиболее удобный для вас способ.


this относится к владельцу функции, которая в данный момент выполняется. Это будет отличаться от лексического контекста. Таким образом, вы не можете заменить node и evt на this.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...