Вы пытаетесь исправить проблему с закрытием, заключив назначение обработчика событий в анонимную функцию. Но ключом к этому трюку является то, что вы должны передать циклическую переменную (или переменные) в качестве аргумента анонимной функции - в противном случае оболочка анонимной функции ничего не делает. Попробуйте:
dojo.ready(function() {
for(var action in page.actions) {
for(var key in page.actions[action]) {
(function(action, key) {
dojo.query(key).connect(action, function(evt) {
if(page.actions[action][key]() == false)
dojo.stopEvent(evt);
});
})(action, key);
}
}
});
Это «исправляет» значения action
и key
во время вызова анонимной функции, поэтому в анонимной функции эти имена переменных применяются только к переданным аргументам, а не к именованным переменным во внешней области , который будет обновляться при следующей итерации цикла.