Kim: JSLint: Consider Closures

Beitrag lesen

Moin,

meine Frage richtet sich an die, die JSLint kennen bzw. gern streng sauberes Javascript schreiben :)

Ich schreibe gerade an einer Webanwendung, bei der Fenster über eine Javascript quasi instanziiert werden können. An einem dieser Fenstertypen kann eine Liste angezeigt werden, die ich mittels der Mootools Sortables per Drag and Drop sortierbar gemacht habe.

Nun will ich das Drag and Drop optisch aufpeppen und will dazu jedem Listenelement ein verhalten bei onmousedown usw. verpassen. Dazu gibt es die folgende, "private Methode" in dieser Klasse:

  
  var initColPanelUl = function()  
  {  
   for (var i = 0; i < colPanelUl.childNodes.length; i++)  
   {  
     // Recognize the following if-case. We have to distinguish  
     // between possible white-space and the li-elements of the list.  
     var li = colPanelUl.childNodes[i];  
     if (li.nodeName.toLowerCase() == "li")  
     {  
       event.on(li.id, "mousemove", function(ev) { interactFilterPanelEv(this.id, "mousemove"); });  
       event.on(li.id, "mouseout", function(ev) { interactFilterPanelEv(this.id, "mouseout"); });  
       event.on(li.id, "mousedown", function(ev) { interactFilterPanelEv(this.id, "mousedown"); });  
       event.on(li.id, "mouseup", function(ev) { interactFilterPanelEv(this.id, "mouseup"); });  
     }  
   }  
  };  

Hinweis: event ist ein Attribut der Klasse, das YUI.util.Event entspricht.

Nun meckert JSLint viermal wie folgt, was ich ja auch nachvollziehen kann, aber mir fehlt gerade die Idee zu einer einfacheren, sauberen Lösung:

Be careful when making functions within a loop. Consider putting the function in a closure.

Die Menge an möglichen Listeneinträgen ist leider keine feste Menge, sonst könnte man ja einfach auflisten.

Vorschläge? :)