2013-04-10 54 views
1

following question我包裹着我的编译自举JS插件文件的AMD模块中,像这样的一些阅读后:使用Twitter的引导与requireJS - 不确定是不是function`

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 

看来$并没有被定义,即使它被传递到模块中。完整包装的引导程序模块可用here

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

回答

1

我通过在bootstrap JS文件中添加以下几行代码来解决了这个问题。

window.jQuery传递到修改这个功能包括的Zepto全局对象也像这样window.jQuery || window.Zepto

点击此处了解详情:

Zepto with Bootstrap

1

既然你有define(['zepto'], function($){ ...Bootstrap pasted here... });,只需更换所有window.jQuery$进行函数调用调用。

1

我刚刚有同样的问题。我为bootsrap添加了一个垫片,现在它似乎工作。这是除了你的其他垫片之外。

shim: { 
    'bootstrap': { 
     deps: ['zepto'] 
    }, 
}, 
0

如果你不想要编辑的引导JS文件,它可能是值得考虑这个垫片,应该引导加载之前设置的jQuery对象。

'zepto': { 
    exports: '$', 
    init: function() { 
     window.jQuery = $; 
    } 
    } 
相关问题