8

RequireJSを使用するときにtemplateSettingsfor lodashを設定する方法はありますか?

現在、メインのスタートアップで、

  require(['lodash', 'question/view'], function(_, QuestionView) {
    var questionView;
    _.templateSettings = {
      interpolate: /\{\{(.+?)\}\}/g,
      evaluate: /\{\%(.+?)\%\}/g
    };
    questionView = new QuestionView();
    return questionView.render();
  });

しかし、モジュールでtemplateSettings使用するときにデフォルトを使用したいので、グローバルに設定したくないようです。問題は、を使用するすべてのモジュールでこの設定を変更したくないことです。_.template(...)templateSettings_.template(...)

4

3 に答える 3

16

@Tyson Phalp の提案に基づいて、これは SO questionを意味します。
あなたの質問に合わせて調整し、RequireJS 2.1.2 とSHIM 構成を使用してテストしました。
これはmain.jsファイルで、requireJS 構成は次の場所にあります。

require.config({
/*  The shim config allows us to configure dependencies for
    scripts that do not call define() to register a module */

    shim: {
      underscoreBase: {
        exports: '_'
      },
      underscore: {
        deps: ['underscoreBase'],
        exports: '_'
      }

    },
    paths: {
      underscoreBase: '../lib/underscore-min',
      underscore: '../lib/underscoreTplSettings',
    }
});

require(['app'],function(app){
  app.start();
});

次に、次のunderscoreTplSettings.jsように templateSettings を使用してファイルを作成する必要があります。

define(['underscoreBase'], function(_) {
    _.templateSettings = {
        evaluate:    /\{\{(.+?)\}\}/g,
        interpolate: /\{\{=(.+?)\}\}/g,
        escape: /\{\{-(.+?)\}\}/g
    };
    return _;
});

したがって、モジュールunderscoreにはアンダースコア ライブラリとテンプレート設定が含まれます。
アプリケーション モジュールから、次のようにモジュールを要求するだけですunderscore

define(['underscore','otherModule1', 'otherModule2'], 
   function( _, module1, module2,) { 
      //Your code in here
   }
);

私が持っている唯一の疑いは、同じシンボルを_2 回エクスポートしていることです。これが良い習慣と見なされるかどうかはわかりません。

=========================

代替ソリューション: これも問題なく動作し、上記のソリューションのように追加のモジュールを作成して必要としないようにすることで、もう少しクリーンになると思います。初期化関数を使用して、Shim 構成の「エクスポート」を変更しました。さらに理解を深めるには、Shim 構成リファレンスを参照してください。

//shim config in main.js file
shim: {     
  underscore: {
      exports: '_',
      init: function () {
        this._.templateSettings = {
          evaluate:/\{\{(.+?)\}\}/g,
          interpolate:/\{\{=(.+?)\}\}/g,
          escape:/\{\{-(.+?)\}\}/g
        };
        return _; //this is what will be actually exported! 
      }
  }
}
于 2013-01-28T02:36:23.350 に答える
0

テンプレート設定を含む_変数を、関数の引数として、またはグローバルオブジェクト(ブラウザーの場合はウィンドウ、 nodejsの場合はプロセス)のプロパティとして渡す必要があります。

_.templateSettings = {
      interpolate: /\{\{(.+?)\}\}/g,
      evaluate: /\{\%(.+?)\%\}/g
};
questionView = new QuestionView(_);

または

_.templateSettings = {
      interpolate: /\{\{(.+?)\}\}/g,
      evaluate: /\{\%(.+?)\%\}/g
};
window._ = _  

最初のオプションの方が優れています。

于 2012-10-25T18:06:23.533 に答える
0

アンダースコア >=1.6.0 または lodash-amd を使用している場合、解決策は非常に単純であることに注意してください。

「main.js」構成ファイル

require.config({
  baseUrl: './', // Your base URL
  paths: {
    // Path to a module you create that will require the underscore module.
    // You cannot use the "underscore" name since underscore.js registers "underscore" as its module name.
    // That's why I use "_".
    _: 'underscore',

   // Path to underscore module 
   underscore: '../../bower_components/underscore/underscore',
  }
});

「_.js」ファイル:

define(['underscore'], function(_) {

  // Here you can manipulate/customize underscore.js to your taste.
  // For example: I usually add the "variable" setting for templates
  // here so that it's applied to all templates automatically.

  // Add "variable" property so templates are able to render faster!
  // @see http://underscorejs.org/#template
  _.templateSettings.variable = 'data';

  return _;
});

モジュールファイル。「アンダースコア」とパッチを必要とする「_」モジュールが必要です。

define(['_'], function(_){
  // You can see the "variable" property is there
  console.log(_.templateSettings);   
});
于 2014-09-04T16:54:25.203 に答える