2012-12-29 85 views
0

已经花了整整一天的时间,我认为这是一个呼喊的时间。我正在使用require.js将模块包含在我的主干应用程序中。这是我有:加载动态的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) -> 

一切正常,编制,但也许我不明白它还是我失去了一些东西,电子邮件模块动态加载上的click事件,它有jQueryUI的包括在里面,我相信这只是一个r.js优化文件。

现在我做了另一个点击事件后,电子邮件模块加载,我看到部门模块也有jquerui在它,都进来了90KB,我期望的是部门模块使用jqueryui多数民众赞成已加载电子邮件模块。

感谢您的帮助!

回答

0

我认为你不应该使用这样的jquery loader。你应该使用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'] 
     } 
    } 
});