【发布时间】:2013-12-09 22:37:22
【问题描述】:
我正在尝试通过 RequireJS 加载 jQuery.jstree。您可以在此处查看插件的确切来源:https://gist.github.com/MeoMix/7882144
据我了解,jQuery.jstree 具有三个依赖项:jQuery、jQuery UI 和 jQuery.cookie。
我首先加载我的 RequireJS shim 配置,然后调用初始的 'require' 来启动:
require.config({
// Set the base URL to the Scripts directory of CSWeb
baseUrl: '/csweb/Scripts/',
shim: {
'jquery-ui': ['jquery'],
'jquery.jstree': ['jquery', 'jquery-ui', 'jquery.cookie'],
'jquery.cookie': ['jquery']
}
});
在这里,我定义了相对于 JavaScript 文件根目录的基本 URL。文件jquery.js 位于baseUrl。我还为这两个插件定义了依赖项。 注意:我尝试过使用更明确的 shim 声明,包括定义导出。我没有发现效果有什么不同。
定义我的配置后,我调用:
require([
'jquery',
'jquery-ui',
'jquery.cookie',
'jstree/jquery.jstree'
], function () {
'use strict';
});
这样做会间歇性地产生错误。显然是异步加载问题。错误显示:
Uncaught ReferenceError: jQuery is not defined jquery.jstree.js:978
jquery.jstree 的第 978 行只是将 jQuery 传递到闭包以开始插件初始化的地方:
// 978 jquery.jstree.js: })(jQuery);
我在这里不明白什么?我的大多数插件似乎都没有遇到这个问题。关于这个 jstree 插件的编写方式是否有什么特别糟糕的地方,以至于它适合 RequireJS?还是我不了解 RequireJS shim 配置的核心机制?
更新 1: 这似乎与我从路径加载 jquery.jstree 的事实有关。如果我加载另一个空文件(jstree/jquery.test)——我可以替换这个问题。但是,如果我随后将 test 向上移动一个目录,使其与其他插件处于同一水平 - 一切正常。
【问题讨论】:
-
所以你正在将 jsTree 添加到需要的项目中?您是否需要为此创建 shim 配置?
标签: javascript jquery requirejs