2012-03-21 12 views
8

は、私はちょうどRequireJSで出始めたが、私はそれに2つの定義を()が1つのJSファイルを使用したい部分にこだわっている、このような:requirejs、一つのファイルに2つのクラス

ファイル名:

require(['jquery', 'test', 'test2'], function ($, t1, t2) { 
    console.log(t1); 
}); 

それは第二のparamを見つけない、目:私も自動的にRequireJSフレームワークによってロードされ、ブートストラップ、JSファイルを持っている

define('test1', ['jquery'], function() { 
    return { 
     method1 : function() { 
      console.log("test1 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test1 - method 2"); 
     } 
    } 
}); 

define('test2', ['jquery'], function() { 
    return { 
     method1 : function() { 
      console.log("test2 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test2 - method 2"); 
     } 
    } 
}); 

をtest.js e 'test'ファイル。のみ、 'null'を返します。 'test2.js'というファイルを探すために 'test2'が見つかりません。実際には私のような何かをしたいと思います:

require(['jquery', 'test.test1', 'test.test2'], function ($, t1, t2) { 
    console.log(t1); 
}); 

しかし、とにかく、私は両方のオブジェクトにハンドラを取得したいと思います。私は何を間違えているのですか?

+0

を粒度は、ファイルレベルです。ファイルの一部をインポートすることはできません。 "test.js"をインポートすれば、両方のオブジェクトを取得できます。 – Pointy

+0

@Pointyそれで、 'test'がnullオブジェクトを返すので、私のコードにはまだ何か問題があります。 – w00

+0

ああ... RequireJSの文書によれば、任意の.jsファイルに** **モジュールが1つだけあるべきです。 – Pointy

答えて

16

このように2つの異なるモジュールを書き出すことはできません。あなたは「試験」の「サブモジュール」としてそれらを維持したい場合は、正しい方法を行うには、次のようになります。

define('test', ['jquery'], function() { 
    var exports = {}; 
    exports.test1 = { 
     method1 : function() { 
      console.log("test1 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test1 - method 2"); 
     } 
    }; 

    exports.test2 = { 
     method1 : function() { 
      console.log("test2 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test2 - method 2"); 
     } 
    }; 

    return exports; 
}); 

次に、あなたが行うことができます:

require(['test'], function (test) { 
    var test1 = test.test1; 
}); 
+0

そこに2つのサブモジュールが定義されていて、自分のコードで1つのモジュールだけを使用しています。 r.jsオプティマイザはモジュールの1つだけを最終的なコンパイル済みファイルにロードしますか? – Skurpi

関連する問題