我已经用了一个月的时间了。我正在制作一个backbonejs柱塞,我看到下划线丢失了我的模板设置,并回落到ERB样式模板,而我更喜欢Mustache样式的语法{{ myData }}。我正在设置我的app.js中的值(我总是在我的应用程序中这样做),但由于某些原因,它一直更改回ERB <%=boo%>。有人能帮我弄清楚我的模板设置吗?plunker using underscore templating你需要在chrome开发工具或firebug或等同工具中查看控制台输出。
谢谢你的建议和技巧。我试过了
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g,
evaluate: /\[\[(.+?)\]\]/g
}; 当我在设置后立即在app.js文件中使用console.log(_.templateSettings)时,一切似乎都是正确的,但我的模板没有被处理。我可以在视图内部中断并运行相同的console.log(),我看到它已经切换回ERB样式。有人知道如何让我的设置生效吗?也许这是一个柱塞问题,因为我已经使用过这种方法很多次,但都没有问题。
这通常能起到作用。我甚至试着..。window._ = _;
感谢你的任何帮助,提示,技巧,等等。
发布于 2012-12-06 06:43:13
你只是有一个执行顺序的问题。你的app.js是这样说的:
var app = {
init: function () {
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g,
evaluate: /\[\[(.+?)\]\]/g
};
window._ = _;
},
//...因此,在有人调用app.init()之前,您的模板设置不会被应用。如果我们看一下您在main.js中的一个视图,我们将看到如下所示:
Zurg.Views.AltContent = app.View.extend({
#...
template: _.template([...].join('')),
#...因此,您的_.template调用是在加载和解析main.js时发生的,但直到稍后才会调用app.init()。
你所需要做的就是按照这个顺序安排事情发生:
_.templateSettings以使用您的视图。如果您将_.templateSettings移到外部app.init
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g,
evaluate: /\[\[(.+?)\]\]/g
};
var app = {
init: function () {
// Whatever you really need to initialize things goes here...
},
//...那么一切都会好起来的。顺便说一句,你的window._ = _;技巧没有做任何有用的事情,所以我把它拿出来了。你也应该在_.templateSettings中包含一个escape正则表达式,你可能不需要它,但是完整性是很好的。
https://stackoverflow.com/questions/13731460
复制相似问题