花了一整天的时间,我觉得是时候大喊大叫了。我正在使用require.js在我的骨干应用程序中包含模块。这就是我所拥有的:
我的requirejs配置:
paths:
jquery: "backbone/initializers/jquery_loader"
jqueryui: "backbone/initializers/jqueryui_loader"
modules:
- name: 'application'
- name: 'jquery'
exclude: ['application']
- name: 'jqueryui'
exclude: ['application', 'jquery']
- name: 'email'
exclude: ['application']
- name: 'department_home'
exclude: ['application']
priority: ['application', 'jquery', 'jqueryui']
我的jquery_loader:
define ["jquery.min"], () ->
jQuery = $
jQuery.noConflict(true)
我的jqueryui_loader:
define ['jquery.ui.all'], () ->
我的电子邮件模块:
define ['marionette', 'jqueryui', 'tags'], (Marionette, ui, tags) ->
我的部门主页模块
define ['marionette', 'jqueryui', 'dept_tags'], (Marionette, ui, tags) ->
一切都按预期工作并编译,但也许我不理解它或我遗漏了一些东西,电子邮件模块动态加载点击事件,并且它包含jqueryui,我相信它只是一个r .js优化文件。
现在我在加载电子邮件模块后再执行一次点击事件,我看到部门模块中还有jquerui,两者都是90KB,我期望部门模块使用已经加载的jqueryui。邮件模块。
感谢您的帮助!
答案 0 :(得分:0)
我认为你不应该像这样使用jquery加载器。您应该使用shim属性初始化noConflict。 I've answered something similar a few days ago
在你的情况下,它会是这样的(但在coffeescript中):
require.config({
paths: {
jquery: "path/to/jquery",
jqueryui: "path/to/jqueryui"
},
shim: {
jquery: {
exports: 'jQuery',
init: function() {
return this.jQuery.noConflict();
},
jqueryui: {
deps: ['jquery']
}
}
});