form.submit({
success: function(form, action) {
var userMenuJson = action.result.message
var rootMenu = Ext.getCmp('id_startMenu')
var rootNum = 0
var subMenu for(var i = 0 ; i<=userMenuJson.length -1 ; i++){
userMenu = userMenuJson[i]
if(userMenuJson[i].menu){
rootMenu.add(userMenuJson[i])
rootNum = rootNum + 1
}
else{
subMenu = rootMenu.items.items[rootNum-1].menu
if(userMenuJson[i].text == "-"){
subMenu.add('-')
}
else{
subMenu.add(userMenuJson[i]) //这里userMenu和userMenuJson[i] 是一样的 subMenu.items.items[subMenu.items.items.length -1].on('click',function(){
console.log(userMenu) //这里是最后一条记录userMenuJson[userMenuJson.length]
console.log(userMenuJson[i]) //这里干脆就是undefined
myDesktopApp.modules.createWindow(userMenu)
}
)
}
}
}
}
})上面就是从后台返回JSON,里面包含菜单列表。这段是构建菜单。菜单都可以正常建。可是绑定事件就出问题咯。挺奇怪的问题,userMenu 和 userMenuJson[i] 在每次循环的时候都应一样的啊。但传到function 就出问题咯。
subMenu.items.items[subMenu.items.items.length -1].on('click',function(){
console.log(userMenu) //这里是最后一条记录userMenuJson[userMenuJson.length]
console.log(userMenuJson[i]) //这里干脆就是undefined
myDesktopApp.modules.createWindow(userMenu)
这里是有问题的,在你循环绑定事件时,只是变量的引用,比如i,就是i变量的引用,而不是i的值,那么绑完事件后所有的事件都是引用i变量的值,也就是都是i最后的值。
另外,userMenu变量最好都用var去定义一下,要不默认就是全局变量
http://javascriptcompressor.com/