请教一个extjs问题!

adtadtadt 2011-09-06 11:30:31
最近做了一个extjs的动态生成的panel组件,panel里面放的是复选框和文本框的组合。
现在遇到的问题是,我的for循环里面写的是给动态的panel组件里面的复选框和文本框赋值,而且想做到当不选中复选框时,灰掉文本框。所以说要到复选框的check事件里面写。但是我写的时候却获取不到组件(可能原因是复选框是动态获取的组件)。所以说就实现不了这个功能!


for(i=0;i<r.length;i++){
var name=r[i].value;
var label=r[i].display;
ifnames.push(label);
ipaddrlist = new Ext.Panel({
autoHeight:true,
width:600,
///height:70,
labelWidth:50,
items:[{
layout:'column',
width:500,
items:[{
columnWidth:.2,
layout: 'column',
items: [
new Ext.form.Checkbox({
id:label,
style:'margin-left:25px',
name:name,
listeners:{
check:function(){
}
}
}),{
width:33,items:[{xtype:'label',text:label}]
}
]
},{
columnWidth:.8,
layout: 'form',
items: [
new Ext.form.TextField({
id:label+'ip',
width:130,
fieldLabel : "<span style='margin-left:10px'>虚拟IP地址</span>",
name:name
})
]
}]
}]
});

Ext.getCmp('ip_addr').items.add(ipaddrlist);
other.doLayout(true);
}



for(i=0;i<ifnames.length;i++){
var swit=Ext.getCmp(ifnames[i]).getValue();
var ipaddr=Ext.getCmp(ifnames[i]+'ip').getValue();
Ext.get(ifnames[i]).on('click',function(){
if(swit==true){
// Ext.getCmp(ifnames[i]+'ip').disable(true);
}else if(swit==false){
// Ext.getCmp(ifnames[i]+'ip').enable(true);
}
})
for(j=0;j<net.length;j++){
if(net[j]==ifnames[i]){
Ext.getCmp(ifnames[i]).setValue(true);
Ext.getCmp(ifnames[i]+'ip').setValue(vitual[j]);
}
}
}



求高手看看!谢谢!!!
...全文
202 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
adtadtadt 2011-09-08
  • 打赏
  • 举报
回复
谢谢大家了!问题已解决!
想 问问大家用extjs做Ajax请求的时候是怎样给组件赋值的呢?有时候请求结果还没出来,就给组件赋值会导致组件中的值为空。原因为请求还没结束,而我却把定义的变量赋值给了组件。

大家都怎么动态给组件赋值的呢???
豆虫 2011-09-06
  • 打赏
  • 举报
回复
Ext.getCmp('ip_addr').items.add(ipaddrlist);
改为
Ext.getCmp('ip_addr').add(ipaddrlist);
BLUE_LG 2011-09-06
  • 打赏
  • 举报
回复
等组件加载完全后再执行看看(把执行函数放到动态创建节点的后面)
Exodia 2011-09-06
  • 打赏
  • 举报
回复
代码太长,懒得看了,EXT这个东西,要注意的地方之一就是未渲染的情况,如果遇到这个问题,你应该监听组件的afterrendered事件,这个事件在渲染后会触发,在这个事件函数里面做必须等组件渲染完成后想做的
豆虫 2011-09-06
  • 打赏
  • 举报
回复
var label=r[i].display;
ifnames.push(label);
你的ifname中放的是label 不是id吧

给checkbox加监听是这样的
Ext.getCmp('组件id').on('check',function(item,check){
//item是当前checkbox check监听的是状态 true/false
})

楼主循环 获取组件id 添加事件就行了
adtadtadt 2011-09-06
  • 打赏
  • 举报
回复
现在的情况是 我动态生成的panel已经出来了!
但是我想点击复选框的时候通过它的check事件来控制此动态panel里面的文本框的可编辑与不可编辑属性。
所以我开始直接写在控件里面的check事件里面。但是获取不到文本框的组件.后来我直接写在了加载完组件for循环的下面,用的自定义事件,就是下面第一段代码的形式!但是这样也行不通,而且都没进到里面去。

Ext.get(ifnames[i]).on('check',function(){
if(swit==true){
// Ext.getCmp(ifnames[i]+'ip').disable(true);
}else if(swit==false){
// Ext.getCmp(ifnames[i]+'ip').enable(true);
}
})


ipaddrlist = new Ext.Panel({
autoHeight:true,
width:600,
///height:70,
labelWidth:50,
items:[{
layout:'column',
width:500,
items:[{
columnWidth:.2,
layout: 'column',
items: [
new Ext.form.Checkbox({
id:label,
style:'margin-left:25px',
name:name,
listeners:{
check:function(){
//开始是写在这里的,但是获取不到下面的文本框对象,所以没办法在这里控制文本框的disable
}
}
}),{
width:33,items:[{xtype:'label',text:label}]
}
]
},{
columnWidth:.8,
layout: 'form',
items: [
new Ext.form.TextField({
id:label+'ip',
width:130,
fieldLabel : "<span style='margin-left:10px'>虚拟IP地址</span>",
name:name
})
]
}]
}]
});


豆虫 2011-09-06
  • 打赏
  • 举报
回复
楼主的所谓的动态是指什么
是面板什么的还没出来之前 通过逻辑动态处理呢 还是面板已经出来了 点击某些东西动态增加一些东西
adtadtadt 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fanchuanzhidu 的回复:]

引用 4 楼 adtadtadt 的回复:
引用 2 楼 fanchuanzhidu 的回复:

Ext.getCmp('ip_addr').items.add(ipaddrlist);
改为
Ext.getCmp('ip_addr').add(ipaddrlist);

这2个有什么区别吗?我现在改了还是会提示‘Ext.getCmp(...)为空或者不是对象’

1、组件的容……
[/Quote]

我知道原因就是组件未渲染出来,就是由于组件是动态的才会出现这种情况!所以想问下怎样让组件渲染出来后再去调用它的check事件!这里的check事件现在好像都有问题,点击复选框,没进到里面去。我用的alert()调试的!

Ext.get(ifnames[i]).on('click',function(){
if(swit==true){
// Ext.getCmp(ifnames[i]+'ip').disable(true);
}else if(swit==false){
// Ext.getCmp(ifnames[i]+'ip').enable(true);
}
})

豆虫 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 adtadtadt 的回复:]
引用 2 楼 fanchuanzhidu 的回复:

Ext.getCmp('ip_addr').items.add(ipaddrlist);
改为
Ext.getCmp('ip_addr').add(ipaddrlist);

这2个有什么区别吗?我现在改了还是会提示‘Ext.getCmp(...)为空或者不是对象’
[/Quote]
1、组件的容器提供add方法 向容器里添加组件 不需要获得items再往里add
2、Ext.getCmp('')报错的原因是
1)id写的不正确
2)组件未渲染出来 就去调用Ext.getCmp方法
adtadtadt 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 maderic 的回复:]

Ext.getCmp(this.id + 'ip').disable()
[/Quote]
......
MadEric 2011-09-06
  • 打赏
  • 举报
回复
Ext.getCmp(this.id + 'ip').disable()
adtadtadt 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fanchuanzhidu 的回复:]

Ext.getCmp('ip_addr').items.add(ipaddrlist);
改为
Ext.getCmp('ip_addr').add(ipaddrlist);
[/Quote]
这2个有什么区别吗?我现在改了还是会提示‘Ext.getCmp(...)为空或者不是对象’
adtadtadt 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 adtadtadt 的回复:]
最近做了一个extjs的动态生成的panel组件,panel里面放的是复选框和文本框的组合。
现在遇到的问题是,我的for循环里面写的是给动态的panel组件里面的复选框和文本框赋值,而且想做到当不选中复选框时,灰掉文本框。所以说要到复选框的check事件里面写。但是我写的时候却获取不到组件(可能原因是复选框是动态获取的组件)。所以说就实现不了这个功能!
JScript code

[ali……
[/Quote]
反正哪都一样的!都会提示‘Ext.getCmp(...)为空或者不是对象’

87,990

社区成员

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

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