2013-04-03 49 views
0

我正在嘗試編寫一些基本上爲SharePoint頁面添加便利層的小功能。這些「易於理解的層次」基本上都是用ScripLink功能包裝的JQuery。例如,我有一個使用JQuery禁用頁面上所有複雜的下拉菜單。我有另一個取代所有日期字段與更好的日期字段和更好的日期選擇器。我有另一個擺脫他們用於時間的那些荒謬的下拉菜單,看起來像某人在1995年寫的東西。從多個來源加載JQuery

我希望所有這些功能都是獨立的和獨立的。但我偶然發現了一些問題。

的第一個問題是,我並不總是知道的jQuery或jQuery的UI被加載,即使我檢查它。例如,在第一個特性中,我檢查是否(typeof JQuery =='undefined'),如果我所在的頁面包含JQuery,那麼它會正常工作。如果沒有,那也沒問題..我補充一下。但是,如果我在scriptlink中有另一個jquery特性,它會在第一個scriptlink有機會添加它之前檢查是否(typeof JQuery =='undefined')。比賽狀況!

第二個也是更嚴重的問題是,我所在的頁面有一箇舊版本的jquery-ui(1.8.12),據我所知,它不支持datepicker我是在我的更好日期功能中使用。我在該功能中使用的版本是1.10.2。但是當這個特性運行時,並且看到jquery.ui被定義了,它並沒有定義它。這意味着datepicker結果是未定義的。

是否有定義並在頁面上登記的jQuery庫的一個更好的辦法,所以我可以排序的混合和匹配任何JQuery的SP功能我想在一個特定的網站?

+0

東西尋找到 - http://requirejs.org/ - 如果所有的腳本中使用它,它應該被照顧的 – Ian

回答

2

Craig,

您在尋找的是模塊化腳本加載程序。您可以嘗試RequiresJs或可以是found here的microsoft ajax的類似實現。下面是微軟的Ajax StartJs

 
<script src="http://ajax.microsoft.com/ajax/beta/0911/Start.js" type="text/javascript"> 
<script type="text/javascript"> 

    Sys.require([Sys.scripts.ApplicationServices], function() { 
     //Application services loaded 
    }); 
</script> 

的隨着RequiresJs你將有更多靈活性的例子。

+0

因此,自定義網站也必須使用該腳本加載器嗎?我可以看到如何在不同的迷你功能之間使用腳本加載器。但是,如果我使用自己的jQuery將這些小功能部署到完全自定義站點,並且不使用此腳本加載程序,那麼我認爲我仍然會遇到問題。那是對的嗎? – Craig

+0

它仍然有效,您可以將js文件集作爲資產或樣式庫中的模塊進行部署,然後您可以使用它。基本上你需要推出一個功能的視覺工作室wsp,將設置您的腳本在預定義的位置。 –

+0

我現在正在使用wsp。但是我在已經定義了較老的JQuery-ui的頁面上加載JQuery和JQuery-ui。這是否會讓我使用新的JQuery-ui,而不在同一頁上定義兩個不同的JQuery-ui文件並導致衝突?我將開始研究這個模塊化的腳本加載器,看看我能弄清楚什麼。看起來它有潛力。 – Craig

0

如果你擔心競爭條件,你可以檢查未定義,如果jQuery沒有加載使用setTimeoutsetInterval 1000毫秒並再次測試,它應該已經提出了請求,但你可以循環,直到你'確定jQuery沒有加載。至於jQuery UI的版本,您可以使用$.ui.version來獲取您正在使用的庫的版本。有了這個,你可以檢查最低版本的jQuery UI,但更好的解決方案是API可用性或功能測試,而不是依賴版本。所以如果DatePicker是未定義的,只需檢查使用。