extjs 콤보 상자를 사용할 때 문제가 발생합니다 (브라우저와 상관없이 Chrome에서 테스트되고 동일한 결과로 FF로 테스트 됨).ExtJS 4 - ComboBox 문제
콤보 상자가 잘로드되어 두 항목이 모두 표시됩니다. 처음에로드 된 두 개 중 하나를 선택할 수 있지만 이미 선택한 후에 선택을 변경하면 원래 값이 유지되고 선택 또는 변경 이벤트가 발생하지 않습니다. 필자는 선택되지 않은 항목을 입력하기 시작하면 자동 완료 기능이 작동하고 return 키를 눌러 항목을 선택하고 select 이벤트와 change 이벤트가 발생하는 것으로 나타났습니다. 선택하지 않은 항목을 클릭하기 만하는 이유는 무엇입니까?
[{"iMonitorID":"85","sMonitorName":"6176 - xxx.xxx.xxx.xxx default monitor"},{"iMonitorID":"86","sMonitorName":"14177 - aaa.bbbbbbbbb.com default monitor"}]
감사 :
//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('--------------------------------------------------------------------');
}
}
});
프록시는 다음과 같은 문자열을 반환 :
다음은 모델, 리더, 데이터 저장 및 콤보 상자 코드입니다. 어떤 도움을 주시면 감사하겠습니다.
편집 : 난 아직이 문제를 생각하지 않은,하지만 그 동안, 나는 주위에 "더러운"일을 발견했습니다
2011-09-08 중부 표준시 16시 32분 ... expand 이벤트는 사용자가 다른 값을 선택할 수있는 이전 값을 지 웁니다. 그러나 문제는 "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에서 지정합니다. * 구성 요소가 하위 항목이 될 경우이 옵션을 사용하지 마십시오. 컨테이너. 컨테이너의 레이아웃 매니저가 자식 아이템을 렌더링하고 관리해야 할 책임이 있습니다. * 기본적으로, 컴포넌트가 렌더링 자체를 관리하지 않는다는 것을 이해하면, 그 자체가 렌더링 객체를 관리합니다. items config를 사용하여 컨테이너에 구성 요소를 추가하고 config renderTo를 삭제하십시오. – nscrob
감사합니다 nscrob, 원래는이 콤보 상자를 콤보 상자가 같은 위치에 렌더링 된 패널에 중첩 시켰습니다. 같은 문제가 발생했습니다. 나는 데이터 저장소와 관련이 있다고 생각한다. 프록시를 사용하지 않고 "필드"와 "데이터"(실제로는 아니지만 호기심이 강하다)에서 하드 코드를 사용하면 제대로 작동하기 때문이다. – SerEnder
이제 내가 격자에 대한 확인란 열 모델과 동일한 문제가 있다고 생각하는데, 그 문제는 저장소가 다른 어딘가에서 사용되었다는 사실을 발견했습니다. 사실 extjs4에서는 저장소에 훨씬 더 가까이 바인딩되어 있습니다 , 레코드에 대한 수정은 그것을 사용하는 구성 요소를 렌더링하는 커밋이 필요합니다. 다른 곳의 상점을 사용하는 경우이 문제가 될 수 있습니다 ... – nscrob