1

在阅读了以下问题后,我将编译的引导 JS 插件文件包装在 AMD 模块中,如下所示:

define(['zepto'], function($){ ...Bootstrap pasted here... });

然后这就是我的main.js文件的配置:

require.config({
    baseUrl: 'js',
    paths: {
        'zepto': 'lib/zepto',
        'underscore': 'lib/underscore',
        'backbone': 'lib/backbone',
        'text': 'lib/text',
        'bootstrap': 'lib/bootstrap'
    },
    shim: {
        'zepto': {
            exports: '$'
        },
        'underscore': {
            exports: '_'
        },
        'backbone': {
            deps: ['zepto', 'underscore'],
            exports: 'Backbone'
        }
    }
});
require([
    'app',
    'zepto',
    'underscore',
    'backbone',
    'bootstrap'
    ],
    function(App){
        //start the app
        App.initialize();
});

但是在控制台中,我在bootstrap.js文件中收到以下错误:

Uncaught TypeError: undefined is not a function 

即使 $ 被传递到模块中,它似乎也没有定义。完整包装的引导模块可在此处获得。

我正在使用应该与 Bootstrap 兼容的 zepto,并且正在从 shim 中导出 $,所以看不出为什么这对我不起作用。

4

4 回答 4

1

我通过在引导 JS 文件中添加以下代码行来解决此问题。

Wherewindow.jQuery被传递到修改 this 以包含 Zepto 全局对象的函数中,也像这样window.jQuery || window.Zepto

更多信息在这里:

带引导程序的 Zepto

于 2013-04-10T02:50:42.467 回答
1

既然你有define(['zepto'], function($){ ...Bootstrap pasted here... });,你可以window.jQuery把函数调用调用中的all 替换为$

于 2013-05-29T22:03:32.930 回答
1

我刚遇到同样的问题。我为 bootsrap 添加了一个垫片,现在它似乎可以工作了。这将是您其他垫片的补充。

shim: {
    'bootstrap': {
        deps: ['zepto']
    },
},
于 2013-06-21T19:42:09.063 回答
0

如果您不想编辑引导 JS 文件,可能值得考虑这个 shim,它应该在引导加载之前设置 jQuery 对象。

  'zepto': {
    exports: '$',
    init: function() {
      window.jQuery = $;
    }
  }
于 2013-11-12T10:02:24.793 回答