我可能会使这个问题复杂化,但希望它能够快速解决。我试图在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函数(和所有插件)。只是一些想法。