日期:2014-05-16 浏览次数:20348 次
var panel = Ext.create("Ext.panel.Panel"); var arraytest = ["a","b"]; function test(p){ alert(p);//测试时不管点a,还是b,都是提示b,这不是我想要的 } for (var i = 0; i < arraytest.length; i++){ alert(arraytest[i]); var tmp = arraytest[i]; var testText = { xtype: "tbtext", text: "点此测试:"+tmp,//分别得到两个文本:点此测试a与点此测试b listeners: { click: { element: "el", fn: function(){ test(tmp);//当i=0时,tmp="a",当i=1时,tmp="b",分别点击时,应该分别提示a与b ,但是,怪异的是,不管点那个点此测试a或点此测试b,提示的都是为b,而我想要的效果是,点击“此测试a”时,提示a,“点此测试b”时,提示b,怎么解决? } } } } panel.add(testText); }
var a=[]; for(var i=0;i<3;i++)a.push(function(){alert(i)}); a[0]();
------解决方案--------------------
ext4不熟,针对你的问题,用函数委托:
for (var i = 0; i < arraytest.length; i++){ testText=function(tmp){ return { xtype: "tbtext", text: "点此测试:"+tmp,//分别得到两个文本:点此测试a与点此测试b listeners: { click: { element: "el", fn: function(){ test(tmp);//当i=0时,tmp="a",当i=1时,tmp="b",分别点击时,应该分别提示a与b ,但是,怪异的是,不管点那个点此测试a或点此测试b,提示的都是为b,而我想要的效果是,点击“此测试a”时,提示a,“点此测试b”时,提示b,怎么解决? } } } } }(arraytest[i]); panel.add(testText); }
------解决方案--------------------
for (var i = 0; i < arraytest.length; i++){
alert(arraytest[i]);
var tmp = arraytest[i];
var testText =
{
xtype: "tbtext",
text: "点此测试:"+tmp,
myvalue: tmp,
listeners:
{
click: {
fn: function (obj) {
alert(obj.myvalue);
}
}
}
}
}
panel.add(testText);
}
------解决方案--------------------
闭包没做好。。
var testText = { xtype: "tbtext", text: "点此测试:" + tmp, //分别得到两个文本:点此测试a与点此测试b listeners: { click: { element: "el", fn: (function (tmp) { return function () {/////这里做个闭包,生成一个新函数引用父函数的变量tmp test(tmp); } })(tmp)/// } }