Gibt es eine Möglichkeit, die templateSettings für lodash festzulegen, wenn RequireJS?

Im Moment in meinem Hauptstart habe ich,

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

Es scheint jedoch nicht zu wollen, dass templateSettings global festgelegt wird, da bei Verwendung von _.template(...) in einem Modul die Standardeinstellung templateSettings verwendet werden soll. Das Problem ist, dass ich diese Einstellung nicht in jedem Modul ändern möchte, das _.template(...) verwendet.

8
milkypostman 25 Okt. 2012 im 00:37

3 Antworten

Beste Antwort

Basierend auf dem Vorschlag von @Tyson Phalp bedeutet dies diese SO-Frage.
Ich habe es an Ihre Frage angepasst und es mit RequireJS 2.1.2 und SHIM-Konfiguration .
Dies ist die main.js Datei, in der sich die requireJS-Konfiguration befindet:

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();
});

Dann sollten Sie die Datei underscoreTplSettings.js mit Ihren templateSettings wie folgt erstellen:

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

Ihr Modul underscore enthält also die Unterstrichbibliothek und Ihre Vorlageneinstellungen.
Für Ihre Anwendungsmodule benötigen Sie lediglich das Modul underscore auf folgende Weise:

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

Der einzige Zweifel, den ich habe, ist, dass ich das gleiche Symbol _ zweimal exportiere, auch wenn diese Arbeit schwierig ist. Ich bin mir nicht sicher, ob dies als gute Praxis angesehen wird.

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

ALTERNATIVE LÖSUNG: Dies funktioniert auch gut und ich denke, es ist ein bisschen sauberer, zu vermeiden, ein zusätzliches Modul als obige Lösung zu erstellen und zu benötigen. Ich habe den 'Export' in der Shim-Konfiguration mithilfe einer Initialisierungsfunktion geändert. Weitere Informationen finden Sie in der Shim-Konfigurationsreferenz.

//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! 
      }
  }
}
16
Community 23 Mai 2017 im 12:01

Sie sollten Ihre Variable _ mit Vorlageneinstellungen als Funktionsargument oder als Eigenschaft im globalen Objekt übergeben ( Fenster für Browser oder Prozess für Knotenjs).

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

Oder

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

Erste Option ist besser.

0
Vyacheslav Voronchuk 25 Okt. 2012 im 18:06

Denken Sie daran, dass bei Verwendung von Unterstrich> = 1.6.0 oder lodash die Lösung ziemlich einfach ist:

Konfigurationsdatei "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',
  }
});

Ihre "_.js" -Datei:

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 _;
});

Eine Moduldatei. Es erfordert unser "_" -Modul, das "Unterstrich" benötigt und es patcht.

define(['_'], function(_){
  // You can see the "variable" property is there
  console.log(_.templateSettings);   
});
0
Túbal Martín 4 Sept. 2014 im 16:54