2012-05-03 7 views
7

$.data()을 사용하여 다른 jQuery 플러그인과 충돌을 피할 수있는 방법은 무엇입니까?jQuery.data() 네임 스페이스

나는 전체를 무시하지 않고, I 등 $(el).data('myplugin').foo

그러나 쉽게 값을 변경하는 방법처럼

$(el).data('myplugin', { foo: 'a', xyz: 34});

처럼 내 데이터를 저장하고 액세스 할 수있는 하나의 키를 사용할 수 있습니다 생각 데이터? "foo"값을 변경하는 것과 같습니다.

답변

7

$(el).data('myplugin.foo') 

$(el).data('myplugin.xyz') 

를 사용하지 않는 이유는 무엇입니까?

동시에 두 개 이상의 값에 액세스 할 필요가없는 경우 쓸데없는 방향 및 테스트를 피할 수 있습니다.

+0

* .key *는() s – m90

+0

@ m90 외부에 있어야합니다. 그는 문자로 "myplugin.foo"라는 이름을 지정하려고합니다. . –

+0

@Rocket은 * var.iable *을 가지고 있다고 생각조차하지 않았습니다. 이것이 유효한 문법인지 알고 있습니까? – m90

7

변경하려는 속성 만 변경하십시오.

var el = $("<div />");  
el.data("myPlugin",{ foo: "foo" }); 
console.log(el.data("myPlugin").foo); // foo 
el.data("myPlugin").foo = "bar"; 
console.log(el.data("myPlugin").foo); // bar 

지금까지와 같은 네임 스페이스 충돌

http://jsfiddle.net/rQQdf/

, 하나의 솔루션은 (플러그인이 정의) 런타임에 타임 스탬프를 생성하고 네임 스페이스에 그 타임 스탬프를 사용하는 것입니다. 가장 빠른 브라우저에서 여전히 충돌로부터 100 % 보호되지는 않지만 꽤 가까워집니다.

+0

+1은 객체가 참조 :-) –

+0

객체가 참조이기 때문에이 함수가 작동합니다. ( 이 접근법은 피하고자 했으니까요. 'var data = el.data ("myPlugin "); data.foo ="bar "; el.data ("myPlugin ", 데이터), ' +1 Kevin. – Jashwant

3

저는 개인적으로 클래스 이름, ID, 데이터 속성 등에 코드를 소유하는 엔티티의 단축 식별자와 기능 영역 앞에 하나씩 붙는 하이픈으로 구분 된 이름 지정 규칙을 사용합니다. (이 회사에 고유 한 모든 회사 식별자를 만들기 위해 내가 할 수

foo-chart- 

, 서로의 코드 영역 독특한 : 나는 회사의 푸의 차트 프로그램에서 작업하는 경우

, 내 접두사 수 있습니다 다른 기능 영역의 다른 개발자와의 충돌을 피하기 위해).

인위적인 예 : - 중 마크 업 ATTR 값으로 또는 이름 또는 코드 등 내가 하이픈을 사용하여 찾을

<button id="foo-chart-refresh" class="foo-chart-interact" data-foo-chart-last="201205031421">Refresh Chart</button> 
<script type="text/javascript"> 
    var lastRefresh = $('#foo-chart-refresh').data('fooChartLast'); // see docs on .data() for case/hyphenation handling 
</script> 

내 식별자가 필요하다 거의 모든 장소에 잘 맞는 (.은 매우 일반적 임)

+1

Me 3. 특히 부트 스트랩에서 분명합니다. vascript 모듈'data-slide'''data-slide-to'. 네임 스페이스는 이벤트에도 나타나지만 마침표는 'slid.bs.carousel'입니다. –

관련 문제