제이쿼리의 data() 는 내부적으로 캐싱을 수행한다.

박상준·7일 전
0
  • 회사에서 프로젝트 진행중인데 data() 값을 변경함에도 불구하고
  • 해당 값을 자꾸 이전값으로 들고오는것이다..
  • 찾아보니..\
    • 제이쿼리는 data 메서드를 사용하는 경우 내부적으로 캐싱이 존재하면 캐싱된 값을 먼저 호출한다고 한다.
data: function( elem, name, data, pvt /* Internal Use Only */ ) {
		if ( !jQuery.acceptData( elem ) ) {
			return;
		}

		var thisCache, ret,
			internalKey = jQuery.expando,
			getByName = typeof name === "string",

			// We have to handle DOM nodes and JS objects differently because IE6-7
			// can't GC object references properly across the DOM-JS boundary
			isNode = elem.nodeType,

			// Only DOM nodes need the global jQuery cache; JS object data is
			// attached directly to the object so GC can occur automatically
			cache = isNode ? jQuery.cache : elem, <- 요부분

			// Only defining an ID for JS objects if its cache already exists allows
			// the code to shortcut on the same path as a DOM node with no cache
			id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;

		// Avoid doing any more work than we need to when trying to get data on an
		// object that has no data at all
		if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
			return;
		}
		
	
  • 해당 현상은 내가 JS 의 제이쿼리의 attr 로 data 를 세팅했지만
  • 실제 호출시에는 data() 메서드로 호출했기 때문이다.
  • 양 메서드간의 데이터 캐싱의 불일치성때문에 해당 현상이 발생한다고 한다.

attr 를 쓸거면 그걸로만 쓰고

data 를 쓸거면 그걸로만 읽고 써라..

profile
이전 블로그 : https://oth3410.tistory.com/
post-custom-banner

0개의 댓글