Underscore template throwing variable not defined error

后端 未结 2 1814
余生分开走
余生分开走 2020-11-22 05:53

I\'ve watched some videos on the topic of backbone js. This is an example straight from the video. It is from 2012, so I\'m thinking backbone rules/library have changed, but

2条回答
  •  無奈伤痛
    2020-11-22 06:23

    You used to be able to parse and fill in an Underscore template in one go like this:

    var html = _.template(template_string, data);
    

    But as of Underscore 1.7.0, the second argument to _.template contains template options:

    template _.template(templateString, [settings])

    Compiles JavaScript templates into functions that can be evaluated for rendering. [...] The settings argument should be a hash containing any _.templateSettings that should be overridden.

    You have to compile the template using _.template and then execute the returned function to get your filled in template:

    var tmpl = _.template(template_string);
    var html = tmpl(data);
    
    // or as a one-liner, note where all the parentheses are
    var html = _.template(template_string)(data);
    

    In your case, it would look something like this:

    var V = Backbone.View.extend({
      el:'body',
      render: function () {
        var data = { lat: -27, lon: 153 };
        var tmpl = _.template('<%= lat %> <%= lon %>');
        this.$el.html(tmpl(data));
        return this;
      }
    });
    
    var v = new V();
    
    v.render();
    
    
    
    

提交回复
热议问题