2011-04-22 3 views
3

jQuery.data()에 대한 몇 가지 테스트를하고 있으며 특정 데이터 키에 대한 로컬 참조를 만들려고합니다. 로컬 키를 변경하고 여전히 바깥쪽에 영향을 줄 수 있습니다. ".jQuery.data 키에 대한 로컬 참조 만들기

http://jsfiddle.net/esbenp/p4kt2/22/

나는 희망의 출력은 다음과 같습니다 :

{1: {length: 1}, total: 1} 

그러나 나는 때문에 내가 대신 여기의 jsFiddle에 그것을 게시 된 세미 롱 코드, 예제를 통해 더 나은 것 같아 length 속성 만 로컬 변수를 증가시켜 영향을받습니다.

{1: {length: 1}, total: 0} 

어떻게해야합니까?

+0

I 될 것입니다 로컬 변수가 영향을 미치려고하는 외부 변수와 이름이 같아서 [가변 그림자] (http://en.wikipedia.org/wiki/Variable_shadowing)를보고 있다고 생각합니다. –

+0

내가 이것을 정확하게 이해한다면, 로컬 변수 total을 total_errors와 같은 다른 것으로 바꿀 것을 제안하고있다. 따라서 이름은 $ .data 객체의 이름과 같지 않다? 그렇다면 시도해 보았지만 작동하지 않았습니다. < – Esben

답변

5

당신은 당신이 그래서 만약 당신이 실제로 그것에 참조를 저장하고 .data()객체 (또는 배열) 저장하는 경우 :

var obj = { key: 'value' } 
$(el).data('obj') = obj; 
obj.key = 'new value'; 
이 가

$(el).data('obj').keynew value 것, 그것은 때문에를 동일한 개체.

저장된 값은 일반 유형의 대신이다 그러나 경우 (예를 들어, 숫자 또는 문자열)을 그것의가 저장 될 복사하는 것이 :

var n = 5; 
$(el).data('obj') = n; 
n++; 

$(el).data('obj')은 여전히 ​​5

+0

Aaah .. 감사합니다. 매우 계몽! – Esben

2

거짓말하지 않을 것입니다 - 그 코드는 매우 혼란 스럽습니다. 이러한 모든 자체 실행 기능을 사용해야하는 이유가 있습니까? 목표를 달성하는 데 훨씬 간단한 방법으로 이것을 코딩 할 수 있다고 생각합니다 (최소한이 평신도에게는).

어쨌든 나는 이것이 당신이 찾고있는 대답은 확실하지 않지만, AddError 안에 디버거를 멈추게하여 그 범위와 사용할 수있는 것을 이해할 수있게되었습니다. 그래서 당신은 당신이 원하는 출력을 반환하게 할 필요는 이것이다 :

http://jsfiddle.net/qN7wF/2/

functions = { 
    AddError: function() { 
     console.log(total); 
     $(container).data('errors').total++; 
     errors.length++; 
    }, 

그러나 문맥 주어진 ... 나는 놀이에 더해야이 같은데요.

+0

네, 그런 단순한 목표에는 상당히 혼란 스럽습니다. 그것은 훨씬 더 많은 코드를 가진 어플리케이션에서 이렇게하기 때문에 모든 관련없는 코드를 제거했습니다. self-executing funtions가 작동하도록하는 유일한 방법이었습니다. 1 : {length : 0} 키를 추가하고 지역 변수를 생성하는 간단한 솔루션이 있다면 그것을 듣고 싶습니다. 나는 $ (elem) .data로 할 수 있다는 것을 알고 있었지만 $ .data (elem)로 수행하고 싶습니다. 성능 차이는 커야합니다 (또는 읽었습니다 :) – Esben

+0

실제로'$로 주위를 둘러 보았습니다.최근에 제가 작업하고있는 플러그인에 대해 '데이터'가 조금 있습니다. 그리고 나는 그것을 완전히 버릴 것이라고 생각합니다. 즉, 편의성 이외의 다른 주요 이점은 앱의 분리 된 부분 (예 : 개별 모듈)간에 데이터를 유지해야한다는 것입니다. 주어진 모듈 내에서 DOM 요소 자체가 아닌 다른 식별자가있는 한 자신의 저장 메커니즘 (예 : 객체 배열)을 사용하는 것보다 이점이 없습니다. 저렴한 해킹 : 배열 인덱스를 요소에 주어진 o (1) 조회 시간의 요소에 사용자 지정 특성에 저장합니다. –

관련 문제