JQuery UI和RequireJS错误地映射小部件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JQuery UI和RequireJS错误地映射小部件相关的知识,希望对你有一定的参考价值。

我正在使用RequireJS加载Knockout Sortable(v1.10),它有jquery-ui(v1.12)作为依赖。这两个都是通过凉亭添加的,并放在我的require配置中。但是,我遇到了一些奇怪的问题,需要错误地获取某些小部件的路径。

对于jquery-ui,我的路径看起来像这样:

paths: {
    ...
    'jquery-ui': '/lib/jquery-ui/jquery-ui',
    ...
    // or the .min version like below:
    // 'jquery-ui': '/lib/jquery-ui/jquery-ui.min',
}

jquery-ui的东西加载没有任何问题,但组件变得疯狂。我的控制台日志看起来像这样:

GET http://localhost:5000/lib/jquery-ui/jquery-ui/ui/widgets/draggable.js net::ERR_ABORTED    
require.min.js:5 Uncaught Error: Script error for "jquery-ui/ui/widgets/draggable", needed by: knockout-sortable
http://requirejs.org/docs/errors.html#scripterror
    at l (require.min.js:5)
    at HTMLScriptElement.onScriptError (require.min.js:5)

我为3个单独的小部件得到了同样的错误。这些小部件位于/lib/jquery-ui/ui/widgets/*.js,但RequireJS在第二个jquery-ui目录前面。

Knockout Sortable请求资源如下:

require("jquery-ui/ui/widgets/sortable");
require("jquery-ui/ui/widgets/draggable");
require("jquery-ui/ui/widgets/droppable");

我已经尝试了所有的填充和映射方式,似乎没有什么工作,所以我有点不知所措。

另外值得注意的是,如果我使用jquery-ui.min,那么路径将变为:

http://localhost:5000/lib/jquery-ui/jquery-ui.min/ui/widgets/*.js
答案

经过一些修补,我发现我需要稍微修改我的路径如下:

paths: {
    ...
    'jquery-ui': ['/lib/jquery-ui/jquery-ui.min'],
    'jquery-ui/ui': ['/lib/jquery-ui/ui'],
    ...
}

事实证明,稍微更具体的定义版本允许我覆盖正在发生的奇怪行为。当我使用另一个名为NestedSortable的包时,问题变得复杂了两倍。此软件包尚未更新以处理jQuery UI 1.12 +的新文件夹结构。所以我不得不分叉那个仓库并创建一个新的凉亭包。

以上是关于JQuery UI和RequireJS错误地映射小部件的主要内容,如果未能解决你的问题,请参考以下文章

使用requireJS的shim参数 解决插件 jquery.ui 等插件问题

jquery, jquery-ui, requirejs, bootstrap 的关系理解

未捕获的错误:Bootstrap 的 JavaScript 需要 jQuery 和 requirejs

requirejs 与cuba 冲突文件解决

requirejs 和 angularjs 1.5 注入 ui.router 组件失败

RequireJS + jQuery 命名空间问题