gpt4 book ai didi

javascript - jQuery UI API 无法使用 LABjs 正确加载

转载 作者:可可西里 更新时间:2023-11-01 01:54:38 27 4
gpt4 key购买 nike

我最近改用了 LABjs在 SharePoint Webparts (2010) 中加载脚本。这样做的主要原因是为了避免在将多个 Web 部件添加到同一页面时多次将相同的库(如 jqueryjquery.ui)加载到页面。这样,它们中的每一个都可以单独指定其依赖项,而无需监管哪些其他 Web 部件已经添加或可能添加。

两者都是 LABjs和另一个包含脚本链的文件通过 <script> 加载Web 部件标记底部的标记。

10 次中有 9 次,Javascript 执行没有任何问题。但是每隔一段时间,就会抛出一个异常,说明 TypeError: $(...).button is not a function .

即使页面上只有一个 Webpart 并且似乎与浏览器无关(已在页面强制的 FireFox 38、Chrome 43 和 IE 11/IE 8 中测试),也会发生这种情况。

链看起来像这样(为清楚起见进行了编辑):

$LAB.setOptions({Debug:true})
.script("../js/jquery-1.11.3.min.js").wait()
.script("../js/jquery-migrate-1.2.1.min.js").wait()
.script("../js/jquery-ui.min.js").wait()
.script("../js/core.js")
.wait(function(){
jQuery(function() {
init(); // The jQuery UI .button() call
});
})
.script("../js/jquery.multiselect.min.js").wait()
.script("../js/jquery.multiselect.filter.min.js")
.script("../js/rte/jquery.rte.js").wait()
.script("../js/rte/jquery.rte.tb.js")
.script("../js/rte/jquery.ocupload-1.1.4.js")
.wait(function () {
jQuery(function() {
// Some DOM-dependant code lives here
});
});

这是调试器的输出(为清楚起见也进行了编辑):

start script load (ordered async): ../js/jquery-1.11.3.min.js
start script load (ordered async): ../js/jquery-migrate-1.2.1.min.js
start script load (ordered async): ../js/jquery-ui.min.js
start script load (ordered async): ../js/core.js
start script load (ordered async): ../js/jquery.multiselect.min.js
start script load (ordered async): ../js/jquery.multiselect.filter.min.js
start script load (ordered async): ../js/rte/jquery.rte.js
start script load (ordered async): ../js/rte/jquery.rte.tb.js
start script load (ordered async): ../js/rte/jquery.ocupload-1.1.4.js
script execution finished: ../js/jquery-1.11.3.min.js
script execution finished: ../js/jquery-migrate-1.2.1.min.js
script execution finished: ../js/jquery-ui.min.js
script execution finished: ../js/core.js
$LAB.wait() executing: function (){ jQuery(function() { init(); }); }
$LAB.wait() error caught: TypeError: $(...).button is not a function
...
script execution finished: ../js/jquery.multiselect.min.js
script execution finished: ../js/jquery.multiselect.filter.min.js
script execution finished: ../js/rte/jquery.rte.js
script execution finished: ../js/rte/jquery.rte.tb.js
script execution finished: ../js/rte/jquery.ocupload-1.1.4.js
$LAB.wait() executing: function () {
jQuery(function() {
...
});
}
$LAB.wait() error caught: TypeError: $(...).multiselect is not a function
...

此错误几乎总是伴随着 jquery.ui 的长时间加载图书馆。

然而,与此同时,从调试器的输出中可以清楚地看出它已经在 .button() 之前完成执行。打电话。

我已经为此苦苦挣扎了一段时间,对于问题可能是什么以及如何解决它的任何帮助/见解,我们将不胜感激。我一直在抓取 LABjs关于我可能做错了什么的线索的文档,但似乎没有任何东西突然出现在我身上。


注意:确实存在一个 <script>引用jquery在标题中,但是无法删除此引用(我无权访问母版页)并且我已经尝试删除 jquery从链上,无济于事。


编辑:有人建议问题可能是由于 SharePoint 服务器位于负载平衡器之后,这可能是 jquery.ui 上加载时间异常长的原因。图书馆。虽然这是可能的,但我不明白这会如何或为什么会影响 LABjs的加载/执行功能。

---

更新

经过相当多的挖掘,我发现,出于某种我仍然不知道的原因,jquery.ui库绑定(bind)到 jquery而不是 $正如我的代码所期望的那样。为了尝试解决这个问题,我在 core.js 中创建了一个变量 core.$这是用 jQuery.noConflict() 实例化的, 用

包装我的 DOM 依赖代码
(function ($) {
...
})(core.$);

并移动了 .script(".../js/core.js")调用链的末端(以确保所有插件都正确回滚。)

虽然这没有解决问题,但发生率已下降到大约 50 分之一。

最佳答案

@LdTrigger“此外,当不指向负载均衡器时似乎不会发生错误”这告诉您您的解决方案不会在代码中。请尝试使用“持久连接”/“粘性 session ”,这可能是因为您没有足够的“权限”从您所在的另一台服务器获取文件内容,因为它们都在负载均衡器后面

关于javascript - jQuery UI API 无法使用 LABjs 正确加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30873879/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com