13

我想使用 RequireJS 在我的主干.js 应用程序中包含 jQueryUI。我的 index.html 中包含的 main.js 文件如下:

require.config({
    paths: {
            jquery: 'libs/jquery/jquery-1.7.2.min',
            jqueryui: 'libs/jquery/jquery-ui-1.8.18.custom.min',
            underscore: 'libs/underscore/underscore-min',
            backbone: 'libs/backbone/backbone-optamd3-min',
            text: 'libs/require/text',
            templates: 'templates'
       }

});

require(['app'], function(App){
    App.start();
});

对于每个模型/视图/路由器文件,我只在“定义”块的开头包含“jquery”命名空间,如下所示:

define([
    'jquery',
    'underscore',
    'backbone',
    'views/categoryview',
    'text!templates/category.html'
    ], function($, _, Backbone, CategoryView, categoryTemplate){
        // Here comes my code
});

但是 jQueryUI 不能在这些文件中使用。我的代码有问题吗?或者我还应该在每个“定义”块中包含“jqueryui”吗?但是如果我在“define”块中包含“jqueryui”,我应该如何在函数中命名它以避免与jquery发生名称冲突?

4

4 回答 4

4

虽然 kujakettu 的回答至少部分正确,但我还必须在我的 shim 中将 jQuery 指定为依赖项,以确保在 jQuery-UI 之前加载 jQuery。

例如

require.config({
    baseUrl: 'scripts/modules',
    paths:{
        jquery:'../libs/jquery',
        jqueryUI:"../libs/jquery-ui",
        underscore:'../libs/underscore',
        backbone:'../libs/backbone'
    },
    shim: {
        jqueryUI: {
            deps: ['jquery']
        },
        underscore: {
            exports: '_'
        },
        backbone: {
            deps: ["underscore", "jquery"],
            exports: "Backbone"
        },
        waitSeconds: 15
    }
});
于 2013-06-24T12:33:27.903 回答
3

很老的帖子了。有一个工具可用于将 jquery ui 文件转换为 AMD 版本,由 jrburke 创建。希望它会有用!

于 2013-04-09T09:48:50.343 回答
2

您可以在主文件中包含仅修补某些其他对象(如 jQuery UI)的所有文件,如下所示(您需要确保在 jQuery UI 之前加载 jQuery):

require(['jquery', 'app', 'jqueryui'], function ($, App) { App.start(); });

另一种方法是在您已经提到的每个模块中包含 jQuery UI。

我个人更喜欢第一种方法,即使它隐藏了依赖项。

于 2012-04-20T12:55:56.543 回答
0

其他答案现在有点过时了。JQuery UI 带有 AMD 支持。如果您想要整个项目只需使用bower install jquery-ui然后将其添加到路径中。不需要垫片。

如果你想在你的应用程序中加载你需要的 jQuery UI 的子集(而不是加载额外的膨胀),那么只需使用bower install jquery-ui来获取整个内容,然后使用名为 r.js 的 RequireJS 构建工具来创建一个包含你所需要的文件的 AMD 包需要。

于 2015-04-17T18:41:41.933 回答