我已对这个问题进行了重新编辑,以使其尽可能保持清洁。我希望那不会打扰您。
我的主要问题是在我的requirejs设置中无法正确加载jquery插件数据表。(v1.9.4)
我也试图使用DT_bootstrap(将数据表扩展到引导程序)。当我运行页面时,控制台始终告诉我DT_bootstrap失败,因为未定义$ .fn.dataTable。该问题不能出现在DT_bootstrap中,因为我不需要它来运行数据表,而且如果我从应用程序中删除它,则错误仍然相同。我在这里阅读到requirejs尚未准备就绪,无法正常加载requirejs,但是我发现有些人最终成功实现了它,其中大多数人以不同的方式进行实现。到目前为止,我发现的所有示例都不适合我。
错误:“未捕获的TypeError:无法读取$ .fn.dataTable类型(DT_bootstrap.js)typeof的属性'defaults'未定义,它应该是一个函数...
在我决定在自己的应用中实现requirejs之前,我的一个脚本(general.js)正在检查是否有任何带有“ datatable”类的表,并且当它们存在时,我将异步运行datatables脚本,效果很好。我宁愿保持这种方式,以免在我所有的应用程序页面中都加载数据表代码,但这是行不通的。我收到与尝试使用requirejs加载时完全相同的错误。
这是我的“数据主”脚本:
require.config({
paths: {
"jquery": "../vendor/jquery/jquery", // 1.9.1
"jquery.cookie": "../vendor/jquery.cookie/jquery.cookie",
"bootstrap": "../vendor/bootstrap/docs/assets/js/bootstrap", // 2.3.2
"bootstrap-timepicker": "../vendor/bootstrap-timepicker/js/bootstrap-timepicker",
"jqueryui": "jquery-ui-1.10.3.custom.min",
"datatables": "jquery.dataTables", // 1.9.4
"datatables-bootstrap": "DT_bootstrap",
"modernizr": "../vendor/modernizr/modernizr",
"general": "general"
},
shim: {
"jquery": {
"exports": 'jQuery'
},
"jquery.cookie": {
"deps": ["jQuery"],
"exports": 'jQuery'
},
"bootstrap": {
"deps": ['jQuery'],
"exports": 'jQuery'
},
"bootstrap-timepicker" : {
"deps": ['jQuery', 'bootstrap']
},
"datatables": {
"deps": ['jQuery']
},
"datatables-bootstrap": {
"deps": ['jQuery', 'datatables', 'bootstrap']
},
"jqueryui": {
"deps": ['jQuery']
},
"general": {
"deps": ['jQuery', 'bootstrap']
}
}
});
require(
[
"modernizr",
"jquery",
"jquery.cookie",
"bootstrap",
"bootstrap-timepicker",
"jqueryui",
"general",
"datatables",
"datatables-bootstrap"
],
function () {
// console.log('something here');
}
);
另请注意:
这就是我运行require.js的方式:(<script type="text/javascript" src="/js/require.js" data-main="/js/app.js"></script>
请注意,javascript文件夹的路径以“ /”开头)
如果删除“ datatables”和“ datatables-bootstrap”,则我的应用程序运行无任何错误
在我的general.js中,我还有其他条件会异步运行jquery插件(除数据表以外的所有方法)
示例:如果存在calendar元素,则通过加载jquery插件日历脚本 $.getScript()
用户dcodesmith最近尝试帮助我(检查他的回答),并要求我在我的应用中尝试配置,但该操作无效。然后,我尝试在一个简单的网站中使用它,并在该简单应用程序中使用,但是在我的Cakephp应用程序中却没有发生这种情况,其中javascript文件夹被称为“ / js”。我发现的主要区别是:在他的应用程序中,所有文件都位于同一文件夹中,而这在我的应用程序中没有发生(可能与第1点有关)。
我一直在使用也尝试过"exports": 'jQuery.fn.dataTable'
,甚至"exports": 'jQuery.fn.DataTable'
还是"exports": '$.fn.dataTable'
......均无功而返
作为测试,如果我从配置中删除两个数据表脚本,然后$.getScript()
成功运行文件加载,但仍未定义jquery插件($ .fn.dataTable),因此仍然无法使用它
我终于找到了问题的根源。
我用cakephp应用程序重新创建了一个具有相同路由和文件夹类型的网站,终于找到了一些东西。
我在CakePHP中使用了一个称为DebugKit的调试插件,该插件在文档末尾追加了2个脚本。其中之一是jQuery 1.8.1和该插件的脚本,该脚本基本上是一个类似于水平导航的工具栏。
经常有人告诉我不要担心删除此jQuery实例,因为它是以非冲突方式加载的,碰巧一旦禁用此实例,我的requirejs配置终于可以根据需要与插件数据表一起使用了!
我不知道为什么会发生这种冲突,但是我很确定它来自代码的这一部分:https : //github.com/cakephp/debug_kit/blob/master/webroot/js/js_debug_toolbar。 js#L59-73
我以前从没注意到这一点,因为我仅在admin部分使用了datatables插件,而以我的管理员身份登录时php debugger插件始终处于打开状态。
我将标题更改为包括cakephp,这可能对遇到相同问题的人有用
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句