ejyoo's 개발 노트

view 안에 items를 강제로 []로 변경했을 때 extjs 내부오류 본문

FrontEnd/Ext

view 안에 items를 강제로 []로 변경했을 때 extjs 내부오류

ejyoovV 2022. 8. 19. 08:45

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();