2012-12-14 70 views
0

我有一個JavaScript文件,用戶可以在其網站上嵌入。它使用coffeescript和Rails資產管道將一堆文件編譯成一個文件。封裝JavaScript的嵌入式部件

# The following dependencies will be compiled into test.js (rails asset pipeline manifest file) 
# 
#= require jquery 
#= require jquery.cookie 

jQuery -> 
    $.cookie('foo', 'bar') 
    console.log $.cookie('foo') 

可正常工作與樣本頁:

<!DOCTYPE html> 
    <head></head> 
    <body> 
    <script src="http://localhost:3000/assets/test.js" type="text/javascript"></script> 
    </body> 
</html> 

但是這個腳本是一個小部件,所以應該在任何網站上嵌入。如果用戶添加其下自己的jQuery,那麼事情打破:

<!DOCTYPE html> 
    <head></head> 
    <body> 
    <script src="http://localhost:3000/assets/test.js" type="text/javascript"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    </body> 
</html> 

這給了錯誤Uncaught TypeError: Object function (a,b){return new e.fn.init(a,b,h)} has no method 'cookie'

是什麼使包含自我包裹在test.js一切的最好方式?我認爲coffeescript將所有內容封裝在一個匿名函數中可能會有所幫助,但我猜不。

謝謝!

回答