3

我已经使用 plunker 大约一个月了。我正在制作一个backbonejs plunker,我看到Underscore 丢失了我的模板设置并回退到ERB 样式模板,而我想要Mustache 样式语法{{ myData }}。我在我的 app.js 中设置值(我总是在我的应用程序中这样做),但由于某种原因,它不断变回 ERB <%=boo%>。有人可以帮我理顺我的模板设置吗? plunker 使用下划线模板,您需要在 chrome 开发工具或 firebug 或 equiv 中查看控制台输出...

感谢您提供任何提示或技巧。我试过了

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

当我console.log(_.templateSettings)在我的 app.js 文件中设置后,一切似乎都是正确的,但我的模板没有被处理。我可以在视图内部中断并运行相同的 console.log(),我看到它已切换回 ERB 样式。有谁知道如何使我的设置保持不变?也许这是一个笨拙的问题,因为我已经多次使用这种方法而没有问题。

这通常可以解决问题。我什至尝试... window._ = _;

感谢您提供任何帮助、提示、技巧等...

4

1 回答 1

1

你只是有一个执行顺序问题。你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()直到稍后才会调用。

您需要做的就是按以下顺序安排事情发生:

  1. 加载库(jQuery、Underscore、Backbone、...)
  2. 调整_.templateSettings以使用您的分隔符。
  3. 加载您的视图。

如果你把它_.templateSettings移到外面app.init

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

var app = {
  init: function () {
    // Whatever you really need to initialize things goes here...
  },
  //...

那么一切都会好起来的。顺便说一句,你的window._ = _;把戏没有做任何有用的事情,所以我把它拿出来了。你也应该包含一个escape正则表达式_.templateSettings,你可能不需要它,但完整性很好。

于 2012-12-05T22:43:12.700 回答