代码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);
}
}
}]
});
});
运行正常:
期待二楼。。。
注册select listener时你需要提供一个function,addOrRemove是一个function,而addOrRemove('item1')是一次function调用,你把你代码1中的addOrRemove改成返回一个function试试:
function addOrRemove(item){
return function() {
var c =Ext.getCmp(item).getValue();
alert(c);
}
}
我试过了 按你说的是可以的,可问题是我想做一个公共的function出来,因为我表单里面不止一个combobox
@不过是技术: 我上面的代码难道不能公共么?你只需要对每个combobox的select注册成为:addOrRemove('theNameOfCombobox') 就可以了啊
@水牛刀刀:
那怎么注册呢 ,代码1不是你说的意思吗。能不能说的具体一点,或者把我代码修改一下贴上来也行,thanks!
以下是API里面的
@不过是技术: 你的代码3改成:
listeners: { select : addOrRemove('item1') }
addOrRemove是我刚才贴的。这样难道不公用吗
@水牛刀刀:
刚才大意了 没看到你写的 return..
试了一下,可以了!
就是不知道return function(){} 是什么意思
@不过是技术: 因为select是要注册一个function,所以冒号后面就得是个function,而你最早代码的addOrRemove('item1') 不是一个function, 它是一个没有返回值的function的执行结果。所以我的代码里把它修改成了返回一个function的function。大概就是这样。
@水牛刀刀:
有点迷糊,要研究一下,Thank you very much!