ExtJS 4 - ComboBox问题

时间:2011-09-08 19:59:50

标签: extjs extjs4

使用extjs组合框时出现问题(无论浏览器是什么,在Chrome和FF中测试的结果相同)。

组合框加载得很好,两个条目都会显示出来。我可以选择最初加载的两个中的一个,但是如果我在选择之后尝试更改选择,它将保留原始值并且不会触发任何选择或更改事件。我发现如果我开始输入未选中的条目,则自动完成接管,我可以点击返回键来选择条目,并触发select事件和更改事件。为什么我不能只是单击未选中的条目来选择它?

这是模型,阅读器,数据存储和组合框代码:

//Model
Ext.define('cbMonitorModel', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'iMonitorID', type: 'String'},
        {name: 'sMonitorName', type: 'String'}
    ]
});

//Reader
var cbMonitorReader = Ext.create('Ext.data.JsonReader',{
    type: 'json',
    model: 'cbMonitorModel'
});

//Store
var cbMonitorDataStore = Ext.create('Ext.data.Store',{
fields: ['iMonitorId','sMonitorName'],
autoLoad: true,
proxy: {
    type: 'ajax',
    url: '/inc/ajax/Monitors.php',
    actionMethods: 'POST',
    reader: cbMonitorReader,
    extraParams: {
        task: 'getMonitors',
        domain: sMonitorDomainName
    }
}
});

//ComboBox
Ext.create('Ext.form.ComboBox',{
    fieldLabel: 'Monitor',
    store: cbMonitorDataStore,
    queryMode: 'local',
    displayField: 'sMonitorName',
    valueField: 'iMonitorId',
    renderTo: Ext.get('monitorSelect'),
    width: 400,
    listeners: {
        select: function(combo, records, opts) {
            console.log('MonitorComboBox - Select');
            console.log(combo);
            console.log(records);
            console.log(opts);
            console.log(cbMonitorDataStore);
            console.log('--------------------------------------------------------------------');
        }
    }
});

代理返回以下字符串:

[{"iMonitorID":"85","sMonitorName":"6176 - xxx.xxx.xxx.xxx default monitor"},{"iMonitorID":"86","sMonitorName":"14177 - aaa.bbbbbbbbb.com default monitor"}]

感谢。任何帮助将不胜感激。


编辑:2011-09-08 16:32 CST

我仍然没有想出这个问题,但与此同时,我发现了一个“脏”的工作...... expand事件清除了之前的值,允许用户选择不同的值,但是然后问题是我不能使用“getValue()”...因此cb.lastSelection[0].raw.iMonitorID字符串......

ComboBox代码:

var MonitorCB = Ext.create('Ext.form.ComboBox', {
    fieldLabel: 'Monitor',
    store: cbMonitorDataStore,
    queryMode: 'local',
    displayField: 'sMonitorName',
    valueField: 'iMonitorName',
    width: 400,
    renderTo: 'monitorSelect',
    listeners: {
        select: function(cb, rec, opts){
            console.log(cb.lastSelection[0].raw.iMonitorID);
        },
        expand: function(){this.clearValue()}
    }
});

1 个答案:

答案 0 :(得分:3)

你的代码有误。在组合框中,config valueField: 'iMonitorId'使用小写字母d指定,而在模型config name: 'iMonitorID'中指定大号(并且代理返回'iMonitorID' s)。

顺便说一下。您正在使用带有型号和商店的字段配置的阅读器。未使用正确模型的字段配置,因为商店已经有错误的字段配置。

所以解决方案是:

1.摆脱商店配置中的fields: ['iMonitorId','sMonitorName'], 2.在组合框'配置中将valueField更改为'iMonitorID'