2
require.config({
     paths: {
         jquery: 'libs/jquery',
         underscore: 'libs/underscore',
    }
});
define([
    'jquery',
    'underscore',
    ], function($,_){
        var test = _.template("hello: <%= name %>",{name:"warren"});

});

上記のコードでrequirejsを使用してjqueryとアンダースコアをロードすると、なぜこのエラーが発生するのですか...

Uncaught TypeError: Cannot call method 'template' of null

すべての JS が読み込まれているようです... エラーは _.template 行を指しています。これは私を夢中にさせています...

4

1 に答える 1

7

アンダースコア ライブラリをバンドルして requireJS で使用できるようにしましたか?

あなたが書くとき:

define([
    'jquery',
    'underscore',
  ], function($,_){
      var test = _.template("hello: <%= name %>",{name:"warren"});

});

'_' 変数 (コールバック関数の 2 番目の引数) は、アンダースコア ライブラリのエクスポートと共に割り当てられます (2 番目の依存関係が指定されています)。

requireJSのパッケージではない元のバージョンのアンダースコアを使用したと思います。underscore.js ファイルの先頭に次の行を追加します。

define(function () {

最後にこの行:

return _;});

したがって、エクスポートは適切に構成されています。

別の可能な解決策は、グローバル '_' 変数を使用することです。必要なのは、コールバックの 2 番目の引数を削除することだけです。

define([
    'jquery',
    'underscore',
  ], function(){
      var test = _.template("hello: <%= name %>",{name:"warren"});

});

そこから、ブラウザは「_」グローバル変数を使用します。これはアンダースコアで定義され、コールバックが呼び出されたときに設定されます。

jQuery でも同じ動作が期待されます。

于 2012-05-11T07:37:30.743 に答える