加载动态Require.js模块

时间:2012-12-29 14:56:06

标签: backbone.js requirejs marionette

花了一整天的时间,我觉得是时候大喊大叫了。我正在使用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。邮件模块。

感谢您的帮助!

1 个答案:

答案 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']
       }
    } 
});