ExtJs의 ComboBox 트랩

2190 단어 ExtJscombobox
[size=xx-large]
업무 수요로 인해 최근에 extjs 프레임워크를 사용하는 것을 배우기 시작했다.일주일여 동안 거의 2주일 동안 이것저것 익히고 일을 시작했다.
처음에 사용하다가 경험이 없는 손해를 많이 봤다. 예를 들어 처음에는 함수로 패널을 생성하는 코드를 봉인하지 않아서 패널이 한 번만 열리고 두 번째는 열리지 않았다.디버깅, 생각, 그리고 패널이 닫힌 후에 소각된 원인일 수도 있다고 생각하고 자료를 봤는데 그렇습니다.그리고 폼 패널의 레이아웃 등 여러 가지 문제가 있어서 디버깅에 많은 시간을 들였다.직면한 문제 중에서 가장 사람을 미치게 하는 것은combobox이다.
combobox를 사용하는 과정에서 두 가지 문제가 발생했습니다. 첫째, 폼을 제출할 때,combox가 서버에 전송하는 값은 기대하는valuefield 속성이 아니라displayfield이거나 문자열 그룹을 전송합니다.둘째, setValue (val) 함수를 호출하여 초기화할 때, 디스플레이 값은 val에 대응하는 디스플레이필드가 아니라 val을 직접 표시합니다.
이 두 버그를 처음 발견했을 때, 나는 그것의name, id,displayfield,valuefield 등 속성이 잘못 쓰였는지 계속 검사하였는데, 결과는, 결과가 없었다.어쩔 수 없이 도랑에게 도움을 청했습니다. 찾은 해결 방법은name 속성을 삭제하고hiddenName 속성을 추가하는 것입니다.그래서 이렇게 고쳤으니 정말 효과가 있다.API에서hiddenName 이 속성은hiddenName 속성 값을name로 하는 숨겨진 폼 필드를 자동으로 만들 수 있다고 합니다.사실, 내가 가장 먼저 생각한 해결 방법은hidden 폼 필드를 추가하여 폼을 제출하기 전에combo의 값을 수동으로 부여하는 것이다.combo 구성 요소가 적을 때 이렇게 해도 됩니다.
두 번째 문제는 setValue ()와load의 시간 선후에서 나온 것 같습니다. 로드가 완성된 후에 setValue (val) 를 기다려야 해당하는 디스플레이 filed를 표시할 수 있습니다.그래서 나는 원래의 코드를

store.proxy=new Ext.data.HttpProxy({url:"..."});
store.load();
form.findField("cmbxxx").setValue(val);	

... 로 바꾸다

store.proxy=new Ext.data.HttpProxy({url:"..."});
store.on("load", function(){ 
    form.findField("cmbxxx").setValue(val)
});

실행하는 과정에서store의proxy 속성이 변하지 않으면 정상적으로 실행할 수 있습니다.만약store의proxy 속성이 변하면 오류를 보고합니다. 저도 원인을 모르겠습니다. Firefox가 보고한 오류는form입니다.findField("cmbxxx") is null.
도모에게 다시 도움을 청하여 코드를 다음과 같이 변경했습니다.

store.proxy=new Ext.data.HttpProxy({url:"..."});
store.load({
    callback:function(){
        form.findField("cmbxxx").setValue(val);
     }
});


신기하게도 맞다.나는 이 두 단락의 코드가 이론적으로 효과가 모두load가 끝난 후function의form을 실행하기 때문에 이유가 없다고 생각한다.findField().setValue (), 왜 전자가 틀렸을까.그리고 간단한 장면으로 업무 배경을 보충한다. 학생 정보표에 전공과 학급 속성이 있다.학생 목록을 통해 각 기록을 수정할 수 있다.전공과 학급의 선택은 2급 연동된combobox: 전공을 선택한 후 학급을 불러옵니다.두 번째 문제는 학급 정보 밑에 표시된 값의 초기화에 있다.
[/size]

좋은 웹페이지 즐겨찾기