日期:2014-05-16 浏览次数:20460 次
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)///
}
}