使用extjs組合框時(不管瀏覽器是什麼,在Chrome和FF中以相同的結果進行測試),我遇到了一個問題。ExtJS 4 - 組合框問題
組合框加載得很好,兩個條目都顯示出來。我可以選擇最初加載的兩個中的一個,但如果我在選擇後嘗試更改選擇,它會保留原始值,並且不會觸發選擇或更改事件。我發現如果我開始在非選定條目中輸入,自動完成接管,我可以按回車鍵來選擇條目,並選擇事件和更改事件被觸發。爲什麼我不只是簡單地點擊未選擇的條目來選擇它?
這裏的模型,讀卡器,數據存儲和組合框代碼:
//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
我還沒有想通這個問題了,但在此之前,我已經找到了一個「髒」變通...展開事件清除了以前的值,它允許用戶選擇不同的值,但問題是我無法使用「getValue()」...因此cb.lastSelection[0].raw.iMonitorID
字符串...
組合框代碼:
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()}
}
});
以及該組件看起來很好的定義..正如我看到它的問題可能是由renderTo配置造成的......在Api他們指定*不要使用此選項,如果該組件是一個子項目的容器。 Container的佈局管理器負責渲染和管理其子項。*基本上我知道組件不管理渲染本身,而是將它留給Conainer。爲什麼不使用items config將組件添加到容器中,並將配置renderTo刪除。 – nscrob
謝謝nscrob,我原本有這個組合框嵌套在一個面板中,然後渲染到與組合框相同的位置,同樣的問題也發生在那裏。我認爲這與數據存儲有關,因爲如果我不使用代理,但在「字段」和「數據」中使用硬編碼(不現實但很好奇),它的工作原理就很好。 – SerEnder
現在我想到了它,我對網格的複選框列模型有同樣的問題,我發現問題是商店被用在其他地方,事實是,在extjs4中,商店更接近綁定到組件,而對記錄的任何修改都需要提交使用它的組件。如果您在其他地方使用該商店,這可能是問題... – nscrob