如何在plunker中维护我的下划线模板设置?

时间:2012-12-05 20:03:44

标签: javascript backbone.js underscore.js plunker

我一直在使用plunker一个月左右。我正在制作一个backbonejs plunker,我看到Underscore丢失了我的模板设置并回退到ERB样式模板,而我想要Mustache样式语法{{ myData }}。我在app.js中设置了值(我在我的应用程序中总是这样做)但由于某种原因,它会不断更改为ERB <%=boo%>。有人可以帮我把模板设置理顺吗? plunker using underscore templating您需要在chrome dev工具或firebug中查看控制台输出或等同...

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

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

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

通常可以解决问题。我甚至试过......     window._ = _;

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

1 个答案:

答案 0 :(得分: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. 加载您的观点。
  4. 如果您将_.templateSettings移至app.init之外:

    _.templateSettings = {
        interpolate: /\{\{(.+?)\}\}/g,
        evaluate: /\[\[(.+?)\]\]/g
    };
    
    var app = {
      init: function () {
        // Whatever you really need to initialize things goes here...
      },
      //...
    
    然后一切都应该成功。顺便说一句,你的window._ = _;伎俩并没有做任何有用的事情,所以我把它拿出来了。你应该在escape加入_.templateSettings正则表达式,你可能不需要它,但完整性很好。