我正在尝试在我正在编写的插件中加载数据表 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
打电话像
define('resource', ['http://cdn.ajax.blah']);
在这个博客中 http://blog.cbsides.com/RequireJS-What-Not-To-Do.html但它看起来并不可以这样使用,因为每个其他示例都有一个函数作为第二个参数。
问题中使用的方法不起作用,因为 DataTables 是 AMD 感知的。如果它检测到有一个 AMD 风格的加载器(RequireJS 就是),那么它会将自己定义为一个模块。然而,它是invalid用于加载 AMD 模块<script>
,因此出现错误消息。
该模块在forum/admin/footer
应该定义为需要数据表:
define([...,
'//cdnjs.cloudflare.com/ajax/libs/datatables/1.9.4/jquery.dataTables.min.js'],
function (...) {
});
(不需要与 DataTables 模块对应的参数,因为它是一个 jQuery 插件。)
关于将此插件集成到已配置 RequireJS 的站点中的更广泛问题的一些附加说明:
require.config
可以多次调用来添加配置。然而,如果插件和主代码之间不需要协调,这可能被认为是不可接受的。
RequireJS 有一个概念context http://requirejs.org/docs/api.html#multiversion。文档讨论了它用于加载多个版本,但也许它可以有效地进行调整以允许特定于插件的配置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)