-
Solution for : Not firing 'document ready event' When jquery load()♣ Tech & Biz Salon/Tech 2013. 5. 23. 15:07
< 핵심은 마지막에 있으니 급한 분은 마지막 부분을 보세요
( You are Urgent? Solution is in the last. Scroll Down Powerfully!! ) >
바쁘지만... 요거는 기록해두고 넘어가자....
script로 html 을 많이... 제어하는 프로젝트를 진행하고 있다.
이런 html view단 작업 경험이 미천한 나로서는 어렵기도 하고, 매우 귀찮기도 하다.
kendo ui 를 이용하고 있는데, api 설명이 너무 부족하기도 하고... 그래서 삽질이 많다.
피할수 없다면 즐겨라... 조용필 형님의 19집을 들으면서 마인트 콘트롤을 하면서 하고 있다.
암튼 또 대박인 것이 개발 다 했는데 view단 제어 방식을 변경하던가 하면 뭐 완전 새로 개발이다.
제어 방식을 바꿔야 하는 상황이 또 조장되어... 그걸 요 며칠하고 있다가... 삽질한 것을 정리해본다.
1) kendo grid 를 보여주는 리스트 화면
2) 클릭해서 상세화면으로 이동
3) 다시 목록으로 이동
3) 을 구현한 방식은 jquery load() 를 이용하였는데, load 하는 url 페이지가 load 되어도
document ready 가 수행되지 않아서 빈 그리드만 보이는 것이다.
■ 조치 1
javascript 변수로 grid 를 담아서 그리던 것을 바로 해당 grid 개체를 잡아서 그리는 방식으로 변경
-> 이게 원인이 아닌데 한 것이므로 효과 없음. 핵심은 ready 가 수행안되는게 문제임.
■ 조치 2
script 를 이용하지 않고 jsp 상에서 grid 바로 그리는 것을 시도.
kendo 사이트대로 하려는데 어찌된게 tag library 넣으면 에러가 남... 그래서 접음...
이거 넣음 에러 : <%@taglib prefix="kendo" uri="http://www.kendoui.com/jsp/tags"%>
서버단 에러 메시지 : org.apache.jasper.JasperException: The absolute uri: http://www.kendoui.com/jsp/tags cannot be resolved in either web.xml or the jar files deployed with this application■ 조치 3
js 로 분리되어있던 스크립트를 jsp 에 삽입.
허나 그리드 그리는 코드중 kendo datasource 값 태그가 jsp 와 쫑나면서 값이 안나옴.
{
field: "albm_nm",
width: 400,
title: "앨범명",
template: "<a href='' onclick='phtAlbmList.onShow(\"${phto_albm_seq}\"); return false;'>${albm_nm}</a>"
,headerAttributes: { style: "text-align: center"}
}
이 경험은 list view에서도 했었는데... 그때는 #:필드명# 으로 하니 되었는데... 여기선 안 먹음...
■ 조치 4 < Solution >
처음 개발을 이런 제어를 하는 것이면 괜찮은데 다 했던걸 여러번 고치는 상황이 오고, 잘 되지도 않으니 짜증이 많이 남.
도대체 load 가 뭔지 들여다 봄.
▶ ▶ jqeury 중 Ajax 카테고리에 있는 놈이다. 그러다보니 call back 을 쓸수가 있다!
Callback Function
If a "complete" callback is provided, it is executed after post-processing and HTML insertion has been performed. The callback is fired once for each element in the jQuery collection, and
this
is set to each DOM element in turn.123$('#result').load('ajax/test.html', function() {
alert('Load was performed.');
});
In the two examples above, if the current document does not contain an element with an ID of "result," the
.load()
method is not executed.그래서 적용하였더니 잘된다.
$("#wsCwContentBx").load(loadUrl, function(){
phtAlbmList.makeGrid();
});
▶ ▶ 그럼 document ready 는 왜 안먹었던건가?
DOM 이 완전히 로딩되면 이벤트가 발생한다는거 같은데...
영역에 ajax load 를 통해 리스트 페이지 DOM 생성하고,
해당 영역에 다시 상세 페이지 DOM 생성하고,
다시 리스트 페이지를 load 할때는... ( 지금부터 내 추측이다 )
뭔가 브라우저에서 기억하고 있던 것이 있어서 완전히 full로 로드할 필요가 없고, 부분적으로만 로딩하기 때문에
document ready 이벤트를 안타는거 같다.
.empty() 를 하고 .load() 를 했었을때도 안되었으니까.... empty 한다고 DOM 기억하던거 까지 지우지는 못하는거 같다...
DOM 에 대해 간단히 정리해보면...
DOM 은 Document Object Model 의 약자.
html xml Object 에 대한 API 로... javascript, jquery 에서 html object 제어하는 코드를 기술해놓으면
해당 스크립트를 통해 브라우저에서는 내부적으로 DOM 을 이용해 html object 를 제어한다고 이해하면 될 듯
'♣ Tech & Biz Salon > Tech' 카테고리의 다른 글
How to get kendo Datasource Length (0) 2013.05.24 Get children in javascript, jquery / Loop Checkd Checkbox (0) 2013.05.02 JSTL에서 textarea 줄바꿈 문자 replace (0) 2013.04.11