0

我正在尝试编写一些小功能,这些功能基本上为 SharePoint 页面增加了便利层。这些“便利层”基本上是包裹在 ScripLink 功能中的 JQuery。例如,我有一个可以使用 JQuery 禁用页面上的所有复杂下拉菜单。我有另一个用更好的日期字段和更好的日期选择器替换所有日期字段。我还有一个摆脱了他们用于时间的那些荒谬的下拉列表,这看起来像是有人在 1995 年写的东西。

我希望所有这些功能都是自包含和独立的。但是我偶然发现了一些问题。

第一个问题是我并不总是知道是否加载了 jquery 或 jquery-ui,即使我检查了它。例如,在第一个功能中,我检查 if (typeof JQuery == 'undefined'),如果我所在的页面包含 JQuery,它会正常工作。如果没有,那也没关系..我添加它。但是,如果我在 scriptlink 中有另一个 jquery 功能,它会在第一个 scriptlink 有机会添加它之前检查是否 (typeof JQuery == 'undefined')。比赛条件!

第二个也是更严重的问题是,我所在的页面有旧版本的 jquery-ui (1.8.12),据我所知,它不支持我在 Better 中使用的日期选择器日期功能。我在该功能中使用的版本是 1.10.2。但是当功能运行时,看到 jquery.ui 已定义,它没有定义它。这意味着 datepicker 最终是未定义的。

有没有更好的方法在页面上定义和注册 jquery 库,所以我可以在特定站点上混合匹配我想要的任何 JQuery SP 功能?

4

2 回答 2

2

克雷格,

您正在寻找的是模块化脚本加载器。您可以尝试RequiresJs或类似的 microsoft ajax 实现,可以在此处找到。这是 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() {
        //应用服务加载
    });
</脚本>

使用RequiresJs,您将拥有更大的灵活性。

于 2013-04-03T13:32:22.000 回答
0

如果您担心竞争条件,您可以检查未定义的情况,如果 jQuery 没有加载使用setTimeoutsetInterval1000 毫秒并再次测试,那么它应该已经发出请求,但是您可以循环直到您确定 jQuery 不是' t 加载。至于 jQuery UI 的版本,您可以使用它$.ui.version来获取您正在使用的库的版本。有了它,您可以检查 jQuery UI 的最低版本,但更好的解决方案是 API 可用性或功能测试,而不是依赖于版本。因此,如果 DatePicker 未定义,只需检查使用情况。

于 2013-04-03T13:38:50.163 回答