问个JSON数组作用域的问题

noto 2011-05-23 02:50:30

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 就出问题咯。
...全文
186 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
oggmm 2011-05-23
  • 打赏
  • 举报
回复
网上有压缩工具,也有在线压缩。规范的js代码压缩才不会出问题
http://javascriptcompressor.com/
noto 2011-05-23
  • 打赏
  • 举报
回复
看样子问题还挺多的,这小小的一段,基础还是不扎实。明白咯。

对哦。分号我经常忘了写,哈哈,虽然不影响,但不是好习惯。

顺便问一句, 象 extjs-all.js 这类压缩js文件是用什么东西压缩的?是不是每句都要有分号才可以压缩,要不会出错?
oggmm 2011-05-23
  • 打赏
  • 举报
回复
还有,语句结束之后最好还是打上分号“;”
kyzy_yy_pm 2011-05-23
  • 打赏
  • 举报
回复
subMenu.items.items[subMenu.items.items.length -1].on('click',function(这块要有个变量接受哈){

或者用arguments
oggmm 2011-05-23
  • 打赏
  • 举报
回复
补充:你可以把绑定事件的动作独立到一个独立的函数中,然后通过参数传值过去。
另外,userMenu变量最好都用var去定义一下,要不默认就是全局变量
oggmm 2011-05-23
  • 打赏
  • 举报
回复

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最后的值。
noto 2011-05-23
  • 打赏
  • 举报
回复
等答案
my_nature_2 2011-05-23
  • 打赏
  • 举报
回复
没仔细看。是不是闭包的问题
noto 2011-05-23
  • 打赏
  • 举报
回复
结贴咯。另外,还要一个个文件看过去是否规范,有这类自动规范的软件没?

87,990

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧