javascript - 在不访问配置的情况下使用 requirejs 加载外部脚本

标签 javascript jquery requirejs datatables

我正在尝试在我正在编写的插件中加载数据表 javascript 库。问题是当我加载外部资源时发生冲突,因为当我调用 require 时数据表与某些东西发生冲突。

<!-- DataTables -->
<script type="text/javascript" charset="utf8" src="//cdnjs.cloudflare.com/ajax/libs/datatables/1.9.4/jquery.dataTables.min.js"></script>
...
<script type="text/javascript">
    require(['forum/admin/footer']);  <-- crashes here, line 281
</script>

这是错误信息:

Uncaught Error: Mismatched anonymous define() module: function (h){var j=function(e){function o(a,b){var c=j.defaults.columns,d=a.aoColumns.length,c=h.extend({},j.models.oColumn,c,{sSortingClass:a.oClasses.sSortable,sSortingClassJUI:a.oClasses.sSor...<omitted>...ch require.js:8
B require.js:8
M require.js:15
d require.js:26
requirejs require.js:31
(anonymous function) (index):281

由于这是一个插件,我有一些限制要尝试解决,例如不能在开始时调用 require.config() 来指定资源路径。我看到有人像这样使用 define 调用 定义('资源',['http://cdn.ajax.blah']); in this blog 但它看起来不像可以那样使用,因为每个其他示例都有一个函数作为第二个参数。

最佳答案

问题中使用的方法不起作用,因为 DataTables 是 AMD 感知的。如果它检测到有一个 AMD 风格的加载器(RequireJS 就是),那么它会将自己定义为一个模块。但是,用<script>加载AMD模块无效 ,因此出现错误消息。

模块在forum/admin/footer应该定义为需要数据表:

define([..., 
        '//cdnjs.cloudflare.com/ajax/libs/datatables/1.9.4/jquery.dataTables.min.js'], 
        function (...) {
});

(不需要对应DataTables模块的参数,因为它是一个jQuery插件。)

关于在已配置 RequireJS 的站点中集成此插件的更广泛问题的一些附加说明:

  1. require.config可以多次调用以添加配置。但是,如果插件和主代码之间不期望协调,这可能被认为是 Not Acceptable 。

  2. RequireJS 有一个概念 context .该文档讨论了它用于加载多个版本,但也许可以对其进行富有成效的调整以允许特定于插件的配置。

关于javascript - 在不访问配置的情况下使用 requirejs 加载外部脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21624503/

相关文章:

jquery - 将 Jquery.hammer 和 Hammer 2.0.2 与 RequireJS 结合使用

javascript - 更改范围 slider 颜色的最简单方法是什么?

javascript - 在 HTML 中,如何使用 jquery 和 cgi 让 AJAX 将按钮点击发布到 .pay?

javascript - 在 AJAX 页面更改时销毁 InfiniteScroll

c# - 从 WCF 服务向网站发送数据

javascript - 将时间戳从 24 小时更改为 12 小时并通过 jQuery 追加

javascript - 使用 requirejs 加载库和附加模块

javascript - 使用 Javascript 排序

javascript - jQuery异步函数调用,无AJAX请求

javascript - typescript 。引用错误 : require is not defined