首页 新闻 会员 周边 捐助

一个关于combobox监听器的问题

0
悬赏园豆:5 [已解决问题] 解决于 2012-03-16 16:54

代码1:

Ext.onReady(function() {
var symbol_store=new Ext.data.SimpleStore
({
fields : ['symbol'],
data : [['√'],['X'],['N/A'],['XC']]
});

var formPanel = Ext.create('Ext.form.Panel', {
title: '选择',
width:300,
renderTo:Ext.getBody(),
items:[{
xtype:'combo',
name:'item1',
id:'item1',
fieldLabel:'combo',
triggerAction : 'all',
selectOnFocus : true,
allowBlank:false,
store :symbol_store,
mode : 'local',
displayField : 'symbol',
value:'√',
listeners:{
select:addOrRemove('item1')
}
}]

});


function addOrRemove(item){

var c =Ext.getCmp(item).getValue();
alert(c);
}
});

运行异常:

代码2:

Ext.onReady(function() {
var symbol_store=new Ext.data.SimpleStore
({
fields : ['symbol'],
data : [['√'],['X'],['N/A'],['XC']]
});

var formPanel = Ext.create('Ext.form.Panel', {
title: '选择',
width:300,
renderTo:Ext.getBody(),
items:[{
xtype:'combo',
name:'item1',
id:'item1',
fieldLabel:'combo',
triggerAction : 'all',
selectOnFocus : true,
allowBlank:false,
store :symbol_store,
mode : 'local',
displayField : 'symbol',
value:'√',
listeners:{
select:addOrRemove
}
}]

});


function addOrRemove(){

var c =Ext.getCmp('item1').getValue();
alert(c);
}
});

 

运行正常:

问题出在那?

问题补充:

首先,谢谢一楼的回答

还有一种情况

代码3:

Ext.onReady(function() {
var symbol_store=new Ext.data.SimpleStore
({
fields : ['symbol'],
data : [['√'],['X'],['N/A'],['XC']]
});

var formPanel = Ext.create('Ext.form.Panel', {
title: '选择',
width:300,
renderTo:Ext.getBody(),
items:[{
xtype:'combo',
name:'item1',
id:'item1',
fieldLabel:'combo',
triggerAction : 'all',
selectOnFocus : true,
allowBlank:false,
store :symbol_store,
mode : 'local',
displayField : 'symbol',
value:'√',
listeners:{
select:function (){

var c =Ext.getCmp('item1').getValue();
alert(c);
}
}
}]

});

});

运行正常:

期待二楼。。。

不过是技术的主页 不过是技术 | 初学一级 | 园豆:195
提问于:2012-03-16 10:19
< >
分享
最佳答案
0

注册select listener时你需要提供一个function,addOrRemove是一个function,而addOrRemove('item1')是一次function调用,你把你代码1中的addOrRemove改成返回一个function试试:

function addOrRemove(item){
return function() {
var c =Ext.getCmp(item).getValue();
alert(c);
}
}
收获园豆:5
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-03-16 10:33

我试过了 按你说的是可以的,可问题是我想做一个公共的function出来,因为我表单里面不止一个combobox

不过是技术 | 园豆:195 (初学一级) | 2012-03-16 10:35

@不过是技术: 我上面的代码难道不能公共么?你只需要对每个combobox的select注册成为:addOrRemove('theNameOfCombobox') 就可以了啊

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-03-16 10:45

@水牛刀刀:

那怎么注册呢 ,代码1不是你说的意思吗。能不能说的具体一点,或者把我代码修改一下贴上来也行,thanks!

以下是API里面的

不过是技术 | 园豆:195 (初学一级) | 2012-03-16 13:16

@不过是技术: 你的代码3改成:

listeners: { select : addOrRemove('item1') }

addOrRemove是我刚才贴的。这样难道不公用吗

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-03-16 13:26

@水牛刀刀:

刚才大意了 没看到你写的 return..

试了一下,可以了!

就是不知道return function(){} 是什么意思

不过是技术 | 园豆:195 (初学一级) | 2012-03-16 16:11

@不过是技术: 因为select是要注册一个function,所以冒号后面就得是个function,而你最早代码的addOrRemove('item1') 不是一个function, 它是一个没有返回值的function的执行结果。所以我的代码里把它修改成了返回一个function的function。大概就是这样。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-03-16 16:13

@水牛刀刀:

有点迷糊,要研究一下,Thank you very much!

不过是技术 | 园豆:195 (初学一级) | 2012-03-16 16:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册