有没有一种方法来设置templateSettings
为lodash使用时RequireJS ?
现在在我的主启动我有,
require(['lodash', 'question/view'], function(_, QuestionView) {
var questionView;
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g,
evaluate: /\{\%(.+?)\%\}/g
};
questionView = new QuestionView();
return questionView.render();
});
但它似乎并不想设定的templateSettings
因为当我使用全球_.template(...)
的模块中它要使用默认templateSettings
。 问题是,我不希望使用的每个模块中更改此设置_.template(...)
基于@Tyson Phalp建议,这意味着这太问题 。
我把它适用于你的问题,我用RequireJS 2.1.2和测试它匀场片配置 。
这就是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
}
);
我唯一的疑问是,我出口的相同符号_
两次,甚至强硬这项工作我不知道如果这被认为是一个很好的做法。
=========================
另一种解决方案:这也工作正常,我想这是多一点点干净,避免创建并需要额外的模块,如上面的解决方案。 我已经改变了使用的初始化函数的垫片配置的“出口”。 如需进一步了解看沉配置参考 。
//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!
}
}
}
你应该用模板设置为函数参数或在全局对象( 窗口浏览器或proccess为的NodeJS)财产传给你_变量。
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g,
evaluate: /\{\%(.+?)\%\}/g
};
questionView = new QuestionView(_);
要么
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g,
evaluate: /\{\%(.+?)\%\}/g
};
window._ = _
第一个选项是更好的。
记住,如果你使用下划线> = 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);
});