2012-05-03 23 views
7

如何避免與其他jQuery插件衝突使用$.data()jQuery.data()命名空間

我想我可能會使用一個密鑰存儲像

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

我的數據和訪問它像$(el).data('myplugin').foo

但如何能輕易改變的值,而無需重寫整個數據?就像改變「富」的價值一樣。

回答

7

爲什麼不使用

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

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

所以,如果你不需要同時訪問多個值,你可以避免無用的間接和測試。

+0

* .key *需要在()s之外 – m90

+0

@ m90:他建議按字面命名關鍵字「myplugin.foo」 。 –

+0

@火箭從來沒有想過要有* var.iable *。你知道這是否是有效的語法? – m90

7

只需更改您想要更改的屬性。

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 

至於命名空間衝突,一種解決方案是在運行時生成(當插件被定義)的時間戳,並使用該時間戳在您的命名空間。在最快的瀏覽器中,它仍然沒有100%的保護以抵禦衝突,但它變得非常接近。

+0

+1這是因爲對象是一個參考:-) –

+0

這個工程,因爲該對象是一個參考,我應該雖然它早些時候:( 我是避免這種做法,因爲我想我需要做, var data = el.data(「myPlugin 「); data.foo =」bar「; el.data(」myPlugin「,data);' +1 Kevin。 – Jashwant

3

我個人使用以連字符分隔的命名約定,它在擁有代碼的實體的縮寫標識符前加上類名稱,ID,數據屬性等,另一個用於功能區域。

如果我在一個圖形程序的公司美孚正在努力,我的前綴可能是:

foo-chart- 

這讓我做公司獨有的所有公司標識符和代碼領域獨特彼此(以避免與其他功能區域的其他開發者發生衝突)。

人爲的例子:

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

我覺得用一個連字符,幾乎任何地方非常適合我的標識符將需要 - 無論是作爲一個標記ATTR值名稱或代碼等你可以使用任何符合你需要的字符(.是很常見的)

+1

Me three。在bootstrap ja中特別明顯vascript模塊'data-slide'' data-slide-to'。命名空間也會出現在事件中,但週期爲'sliding.bs.carousel'。 –