假设我想将jquery与一个标准的,非amd启用的jquery插件一起使用,该插件已经使用标准闭包定义:(function($))( $.fn.myplugin = { ... } )(jQuery);并且它都位于一个js/libs/jquery/jquery.myplugin.js.
我用这个配置:
require.config({
baseUrl: 'js/',
paths: {
'jquery': 'libs/jquery/jquery-noconflict',
'underscore': 'libs/underscore/underscore',
'backbone': 'libs/backbone/backbone',
'jquery-myplugin': 'libs/jquery/jquery.myplugin'
},
shim: {
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
'jquery-myplugin': {
deps: ['jquery']
}
});
Run Code Online (Sandbox Code Playgroud)
我在无冲突模式下加载jQuery,因为libs/jquery/jquery-noconflict.js我不想污染全局命名空间:
define(['libs/jquery'], function () {
return jQuery.noConflict(true);
});
Run Code Online (Sandbox Code Playgroud)
这就是我加载我的主app.js的方式:
define([
'jquery',
'underscore',
'backbone',
'jquery-myplugin'],
function($, _, Backbone, MyPlugin){
//MyPlugin is always undefined, not even sure if
//I should be passing it here if it only extends jQuery?
});
Run Code Online (Sandbox Code Playgroud)
现在,这是我遇到的问题 - 虽然我可以使用上面定义的所有库没有任何问题,但我无法确定正确的shim配置来加载非AMD启用的jquery插件.
我试着设置jquery-myplugin为deps的jquery(和其他周围的方式),但我永远无法得到它的工作.
看起来我遇到以下情况的问题:
我已经看到类似的问题浮出水面,但没有一个实际上解决了这个问题只给出了模糊的建议,如"使用shim config"......
编辑
我也试过用
"jquery-myplugin": {
deps: ["jquery"],
exports: "jQuery.fn.myplugin"
}
Run Code Online (Sandbox Code Playgroud)
虽然插件方法一旦以这种方式加载为AMD模块,我仍然无法访问:$('.class').myplugin()因为默认的$ object没有使用myplugin代码进行扩展.
使用jQuery.noConflict(true)删除jQuery全局变量。当您的插件加载时,它会尝试访问jQuery,但无法访问,从而导致此失败。
如果您的插件是一个模块,它可以作为依赖项访问 jQuery。或者您可以将其保留jQuery为全局可用。
| 归档时间: |
|
| 查看次数: |
4096 次 |
| 最近记录: |