如何使用RequireJS在我的模块化backbone.js应用程序中包含jQueryUI?

cha*_*oor 13 jquery-ui requirejs backbone.js

我想在使用RequireJS的backbone.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();
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 2

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

require(['jquery', 'app', 'jqueryui'], function ($, App) { App.start(); });
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这种方法是**错误的** requirejs 不保证 jquery 在 jqueryui 之前加载。使用带有手动依赖项的填充程序配置会更好。 (9认同)