2011-12-10 3 views
1

アンダースコアはAMDモジュールとしてロードされるので、アンダースコアに対してグローバルオプションを設定する方法については誰でも推奨しています。同じ統一されたモジュール名を使用し、私の上書きを利用可能にする。AMDモジュールとしてrequire.jsを使用すると、underscore.jsのデフォルト値を無効にします

私はそれを使って遊んできましたが、これまでは基本的に依存性としてアンダースコアを含むラッパーを用意していましたが、変更を加えて修正されたアンダースコアを返しました。 define.jsインサイド

paths: { 
    'underscore': 'libs/underscore/1.2.3/underscore', 
    'underscore-override': 'libs/underscore/define' 
} 

私は基本的には次ています

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

    // use mustache syntax 
    _.templateSettings = { 
     interpolate : /\{\{(.+?)\}\}/g 
    }; 

    return _; 

}); 

をこのアプローチは動作しますが、私は私がする必要がないように、これを達成するためにはるかにエレガントな方法があると確信しています'アンダースコア - カスタム'を使用します。

提案がありますか?

UPDATE :-)

乾杯:私は今、次の操作を行い受け入れ答えで提案に基づいて:

のlibs/bootstrap.js

define([ 
    // add custom library defines here 
    '../libs/underscore/define' 
], function() { 

    var libs = [].slice.call(arguments), 
     initialize = function() { 
      libs.forEach(function (lib) { 
       if (typeof lib === 'function') { 
        lib(); 
       } 
      }); 
     } 

    return { 
     initialize : initialize 
    } 

}); 

のlibs /アンダースコア/定義

define(['underscore'], function(_) { 
    return function() {  
     // add custom settings here 
    }; 
}); 

main.js

require(['libs'], function(libs){ 
    libs.initialize(); 
}); 

答えて

2

あなたは、おそらく設定する必要が何にロードするコンフィグレータモジュールを持つことができます。

define(['underscore', 'jquery'], function(_, jQuery){ 
    var setUp = function(){ 
    // Underscore Configuration 
    _.templateSettings = {}; 

    // jQuery Configuration 
    $.someplugin = {}; 
    }; 
    return { setUp: setUp }; // or something like that 
}); 

//main.js 
define(['configurator'], function(config){ 
    config.setUp(); 
}); 
+0

私はこれに似たものを考えましたが、アンダースコアやjQuery固有のオプションをそれぞれの自己定義にローカライズしたままにしたいと考えました。 しかし、このアプローチは、将来の構成のバリエーションの範囲を提供する可能性があります。 – indieisaconcept

+0

私は上記をうんざりしているように見えますが、私が言っていることは次のとおりです: 私はこれを実行しましたが、内蔵のライブラリ設定をサポートするために調整しました。 私は基本的に今カスタム設定を登録するために使用するライブラリ用のブートストラップインクルードを持っています。上書きするか、オプションを追加する必要がある各ライブラリカスタム定義を作成し、これをブートストラップで参照します。 ブートストラップはinitialize関数を公開し、main.jsを呼び出します。 おそらく抽象化されていますが、これまでのところ動作しているようです。先端に感謝します。 – indieisaconcept

関連する問題