我编写了这样的代码,以便更容易地连接事件的回调:
dojo.ready(function() {
for(var action in page.actions) {
for(var key in page.actions[action]) {
(function() {
dojo.query(key).connect(action, function(evt) {
if(page.actions[action][key]() == false)
dojo.stopEvent(evt);
});
})();
}
}
});
page = {
actions :
{
onclick :
{
"#page-action-one" : function()
{
alert("Action 1");
return false;
},
"#page-action-two" : function()
{
alert("Action 2");
return false;
}
}
}
};
但点击“#page-action-one”和“#page-action-two”发出相同的警报(“Action 2”)。我尝试使用Cloer,但没有效果。我现在,我可以用不同的方式,但我想现在,为什么会发生这种情况。
1条答案
按热度按时间ercv8c1e1#
你试图通过在匿名函数中 Package 你的事件处理器赋值来解决闭包问题,但是这个技巧的关键是你必须把循环变量作为参数传递给匿名函数,否则匿名函数 Package 器什么也不做。
这样就在调用匿名函数时“固定”了
action
和key
的值,因此在匿名函数中,这些变量名只应用于传递的参数,而不应用于外部作用域中的命名变量,后者将在下一次循环迭代时更新。