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 就出问题咯。

解决方案 »

  1.   


    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最后的值。
      

  2.   

    补充:你可以把绑定事件的动作独立到一个独立的函数中,然后通过参数传值过去。
    另外,userMenu变量最好都用var去定义一下,要不默认就是全局变量
      

  3.   

    subMenu.items.items[subMenu.items.items.length -1].on('click',function(这块要有个变量接受哈){或者用arguments
      

  4.   

    看样子问题还挺多的,这小小的一段,基础还是不扎实。明白咯。对哦。分号我经常忘了写,哈哈,虽然不影响,但不是好习惯。顺便问一句, 象 extjs-all.js 这类压缩js文件是用什么东西压缩的?是不是每句都要有分号才可以压缩,要不会出错?
      

  5.   

    网上有压缩工具,也有在线压缩。规范的js代码压缩才不会出问题
    http://javascriptcompressor.com/