2012-05-03 19 views
7

Làm cách nào để tránh xung đột với các plugin jQuery khác bằng cách sử dụng $.data()?Vùng tên jQuery.data()

Tôi đã suy nghĩ tôi có thể sử dụng một chìa khóa duy nhất để lưu trữ dữ liệu của tôi như

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

và truy cập nó như $(el).data('myplugin').foo, vv

Nhưng làm thế nào có thể dễ dàng thay đổi một giá trị, mà không trọng toàn bộ dữ liệu? Giống như thay đổi giá trị của "foo".

Trả lời

7

Tại sao không sử dụng

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

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

?

Vì vậy, nếu bạn không cần truy cập nhiều hơn một giá trị cùng một lúc, bạn sẽ tránh được những điều tra và kiểm tra vô dụng.

+0

* .key * cần nằm ngoài() s – m90

+0

@ m90: Anh ấy gợi ý đặt tên cho khóa là "myplugin.foo". . –

+0

@Rocket thậm chí không bao giờ nghĩ đến việc có một * var.iable *. Bạn có biết đây có phải là cú pháp hợp lệ không? – m90

7

Chỉ cần thay đổi thuộc tính bạn muốn thay đổi.

http://jsfiddle.net/rQQdf/

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 

Theo như những xung đột không gian tên, một giải pháp là để tạo ra một dấu thời gian trong thời gian chạy (khi các plugin được định nghĩa) và sử dụng dấu thời gian trong không gian tên của bạn. Nó vẫn không được bảo vệ 100% chống lại xung đột trong các trình duyệt nhanh nhất, nhưng nó khá gần.

+0

+1 công trình này vì đối tượng là một tài liệu tham khảo :-) –

+0

này hoạt động vì đối tượng là một tham chiếu, tôi nên có mặc dù trước đó: ( Tôi đã tránh phương pháp này chỉ vì tôi nghĩ rằng tôi sẽ cần phải làm, 'var data = el.data (" myPlugin "); data.foo =" bar "; el.data (" myPlugin ", dữ liệu);' +1 Kevin. – Jashwant

3

Cá nhân tôi sử dụng quy ước đặt tên dấu gạch nối, tiền tố tên lớp, ID, thuộc tính dữ liệu, v.v ... với mã định danh viết tắt của thực thể sở hữu mã và một cho khu vực chức năng.

Nếu tôi được làm việc trên một chương trình biểu đồ cho công ty của Foo, tiền tố của tôi có thể là:

foo-chart- 

này cho phép tôi để làm cho tất cả các định danh công ty duy nhất cho các công ty, và các khu vực của mã độc đáo với nhau (để tránh va chạm với các nhà phát triển khác trong các lĩnh vực chức năng khác).

contrived dụ:

<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> 

tôi tìm cách sử dụng một gạch nối phù hợp tốt với hầu hết các nơi định danh của tôi sẽ là cần thiết - hoặc là một giá trị attr đánh dấu hoặc tên, hoặc trong mã, vv Bạn có thể sử dụng bất kỳ từ nào phù hợp với nhu cầu của bạn (. là rất phổ biến)

+1

Tôi ba. Nó đặc biệt rõ ràng trong ja bootstrap vascript modules 'data-slide'' dữ liệu-slide-to'. Không gian tên cũng xuất hiện trong các sự kiện nhưng với dấu chấm 'slid.bs.carousel'. –

Các vấn đề liên quan