2014-12-26 2 views
0

Я привязываю событие к элементу в директиве и хочу передать переменную цикла. Как это сделать с помощью закрытий?Реализация закрытия в element.bind - угловая

for(var i=0; i<events.length; i++) { 
    switch(events[i]) { 
       case 'focus' : 
       var m = i; 
       element.bind('focus', function(event) { 
        console.log(m); 
       }); 
       break; 

       case 'blur' : 
       var n = i; 
       element.bind('blur', function(event) { 
        console.log(n); 
       }); 
       break;   
    } 
} 

В приведенном выше коде я использую переменные m и n, но как я могу это сделать без них?

Я также попытался

element.bind('focus', function(num, event) { 
    console.log(num); 
    }(i)); 

Но это не сработало

Демо: http://plnkr.co/edit/gwthMUkXXCQfZYr4bHLg?p=preview

ответ

2

Создайте отдельную функцию, которую можно вызвать, передав i и который возвращает функцию, создавая тем самым закрытие, которое имеет номер, который вы передаете, в контексте.

function callback(num) { 
    return function(event) { 
    console.log(num); 
    } 
} 

Теперь вы можете связать это так

element.bind('focus', callback(i)); 
+0

работает отлично! – user1184100

+0

@ user1184100 рад помочь :) –

Смежные вопросы