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ローダーを使用するべきではないと思います。noConflict を初期化するには、shim プロパティを使用する必要があります。私は数日前に似たようなことを答えました

あなたの場合、それは次のようになります(ただし、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']
       }
    } 
});
于 2012-12-30T11:29:20.110 に答える