일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ViewModel
- 상속
- scanner
- Store
- .net
- Request
- 에스가든스냅
- JSON
- extraParams
- Config
- 라도무스dvd
- vscode
- c#코딩의기술실전편
- ORM
- mac
- lazy loading
- LINQ
- error
- 명시적외래키
- EFCore
- 스냅잘찍음
- React
- intellij
- dbContext
- 대전본식영상
- 코드프로그래머스
- minimalAPI
- JavaScript
- extjs
- c#
- Today
- Total
ejyoo's 개발 노트
view 안에 items를 강제로 []로 변경했을 때 extjs 내부오류 본문
view 안에 items를 강제로 []로 변경했을 때 extjs 의 내부오류가 발생하였다.
내가 만든 기능은
window에서 버튼을 클릭하여 화면을 2번 변경한 뒤
close를 눌렀을 때 화면이 무한로딩이 걸려서 아무런 동작하지 않는 것 처럼 보였다.
원인을 파악한 결과
close 이벤트가 날라갈때
그 뷰가 갖고 있는 여러 객체를 초기화 시키는데 이때 뭔가 오류가 발생하는 듯했다.
오류 메시지는 안나와서 extjs 디버그를 돌리다가 포기하였다.
코드를 자세히 보니
화면을 변경할 때
view의 items를 초기화 하는부분에서
강제로 []로 변경했었는데.
이게 아이템 주소에서 뭔가를 가져올 수 없어서 오류가 나는듯 하여
view items를 초기화 할 때 extjs에서 만든 function을 사용하여 초기화 하였더니
문제를 해결하였다.
* 문제의 코드
testView.items.items = [];
* 수정한 코드
testView.remove(testView.items[0]);
추가로 문제를 더 발견하였다.
testView.remove(testView.items[0]);
이 부분만 소스코드에 존재를 하니
실제 사용자 화면에서
화면 초기화가 안되고 이전에 add된 view가 계속 보였다.
위의 코드는 extjs 내부에서 인식 할 수 있도록 제거를 한 것이고
실제 사용자 화면에서는 뷰가 삭제가 되지 않았으므로
사용자 화면에서도 초기화
실제 extjs 객체 목록에서도 초기화
이 두가지 작업을 해야한다.
testView.items.items = [];
testView.remove(testView.items[0]);
추가로 문제를 더 발견하였다 ㅜㅜ
remove는 view의 id를 써야 삭제가 되기떄문에
remove(testView.items.id) 하였지만 뭔가 이상하다..
사용자 화면이 초기화가 안된다.
testView.items.items = [] 를 쓰면 또 오류 없이 무한로딩이 돈다.
그래서 testView.items.items = []를 아예 쓰지 않으면서
extjs 객체도 지우고 사용자 뷰도 초기화 하는 방법을 찾아야한다.
찾아보니 코드는 아래와 같다.
testView.removeAll();
'FrontEnd > Ext' 카테고리의 다른 글
Cannot have multiple center regions in a BorderLayout. (0) | 2022.08.22 |
---|---|
Unrecognized class name / alias: widget.A (0) | 2022.08.22 |
[Error] Uncaught TypeError: url.endsWith is not a function (0) | 2022.08.19 |
Uncaught TypeError: Cannot set properties of null (setting 'component') (0) | 2022.08.18 |
extjs proxy request 오버라이딩 방법 (0) | 2022.08.09 |