我正在尝试编写一些小功能,这些功能基本上为SharePoint页面添加了一些便利。这些“层层叠叠”基本上是用ScripLink功能包装的JQuery。例如,我有一个将使用JQuery禁用页面上的所有复杂下拉列表。我有另一个用更好的日期字段和更好的日期选择器替换所有日期字段。我还有另外一个摆脱他们用于时间的荒谬下拉,这看起来像是某人在1995年写的东西。
我希望所有这些功能都是独立且独立的。但我偶然发现了一些问题。
第一个问题是我并不总是知道是否加载了jquery或jquery-ui,即使我检查它。例如,在第一个特性中,我检查是否(typeof JQuery =='undefined'),如果我所在的页面包含JQuery,它可以正常工作。如果没有,那也没关系..我添加它。但是如果我在scriptlink中有另一个jquery功能,它将在第一个scriptlink有机会添加它之前检查(typeof JQuery =='undefined')。比赛条件!
第二个也是更严重的问题是我正在使用的页面有一个旧版本的jquery-ui(1.8.12),据我所知,它不支持我正在使用的日期选择器在我的更好日期功能。我在该功能中使用的版本是1.10.2。但是当该功能运行时,并且看到定义了jquery.ui时,它没有定义它。这意味着datepicker最终未定义。
有没有更好的方法在页面上定义和注册jquery库,所以我可以在特定网站上混合和匹配我想要的任何JQuery SP功能?
答案 0 :(得分:2)
克雷格,
您正在寻找的是模块化脚本加载器。您可以尝试RequiresJs或类似的Microsoft ajax实现,可以是found here。以下是Microsoft 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,您将获得更多灵活性。
答案 1 :(得分:0)
如果你担心竞争条件,你可以检查未定义的,如果jQuery没有加载使用setTimeout
或setInterval
1000毫秒并再次测试,它应该已经提出请求但你可以循环,直到你确定jQuery没有加载。至于jQuery UI的版本,您可以使用$.ui.version
来获取您正在使用的库的版本。有了它,您可以检查jQuery UI的最低版本,但更好的解决方案是API可用性或功能测试,而不是依赖于版本。因此,如果DatePicker未定义,只需检查使用情况。