RequireJS - 加载有自己要求的插件

时间:2014-04-29 13:46:23

标签: jquery requirejs

我可能会使这个问题复杂化,但希望它能够快速解决。我试图在requireJS模块中加载一个jQuery插件,其中这个插件有自己的可用插件(FooTables)。因此,我认为,在尝试要求其他插件之前,我需要在jQuery上加载jQuery插件。当插件完成加载时,我考虑过使用jQuery延迟触发另一个需求,但它似乎并没有100%的时间工作。我假设有某种竞争条件。任何输入都会很棒。

这是我目前拥有的代码。我最初在jQuery中加载,然后在Footables中加载,然后在插件中加载一个require,我解决了延迟。

require([
    'jquery'
], function ($) {

    var deferred = $.Deferred();
    var plugins = [
        'vendor/plugins/footables/footable',
        'vendor/plugins/footables/footable.filter',
        'vendor/plugins/footables/footable.sort',
        'vendor/plugins/footables/footable.striping'
    ];

    require([
        'jquery',
        'vendor/plugins/footables/footable'
    ],function(){
        require(plugins, function(){
            deferred.resolve($);
        })
    });

    deferred.done(function($){
        $('#footable-0').footable();
        $('#footable-0').removeAttr('hidden');
    })

});

我的RequireJS配置如下:

require.config({
    paths: {
        'jquery':          '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min',
        'jquery-ui':       'vendor/plugins/jquery-ui-1.10.3.custom',
        'leaflet':         'widgets/leafletjs_wrapper'
    },
    // avoid jquery conflicts on the page, per http://requirejs.org/docs/jquery.html#noconflictmap
    map: {
        '*': { 'jquery': 'vendor/jquery-private' },
        'vendor/jquery-private': { 'jquery': 'jquery' }
    }
    });
require(['app', 'jquery'], function (app, $) {
    'use strict';
});

然后我用app.js启动app,它只是加载jQuery和我试图运行的模块。

define([
    'widgets/footables_wrapper'
], function () {
    'use strict';
    return {};
});

其他所有东西都按照应有的方式加载。我想知道是否需要填充插件,因为我不相信它们是AMD模块,但这是否意味着每个插件的个人垫片?有没有办法对多个文件进行依赖?

或者我可能没有正确传递$变量,因此当它传递给deferred.resolve时,它没有正确连接FooTables函数(和所有插件)。只是一些想法。

0 个答案:

没有答案