0

花了一整天的时间在这上面,我认为是时候大喊大叫了。我正在使用 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。

感谢你的帮助!

4

1 回答 1

0

我认为你不应该像这样使用 jquery loader。您应该使用 shim 属性来初始化 noConflict。前几天我也回答过类似的问题

在你的情况下,它会是这样的(但在咖啡脚本中):

require.config({
    paths: {
        jquery: "path/to/jquery",
        jqueryui: "path/to/jqueryui"
    },
    shim: {
        jquery: {
          exports: 'jQuery',
          init: function() {
             return this.jQuery.noConflict();
          },
        jqueryui: {
          deps: ['jquery']
       }
    } 
});
于 2012-12-30T11:29:20.110 回答