Backbone template method. Why are we passing in a model?

后端 未结 1 654
误落风尘
误落风尘 2020-11-30 15:59

I can\'t figure out why we are passing in a model.toJSON() into this template:

app.TodoView = Backbone.View.extend({
  tagName: \'li\',
  template: _.templat         


        
相关标签:
1条回答
  • 2020-11-30 16:25

    Underscore _.template function takes a template string as argument (and optionally a settings object) and returns a new pre-compiled template function which takes an object as an argument.

    This object is the data used within the template:

    // creates a template function
    var templateFunc = _.template("<span><%= name %></span>");
    
    // render the template using the passed data
    templateFunc({ name: "Émile" }); // <span>Émile</span>
    

    By default, template places the values from your data in the local scope via the with statement. However, you can specify a single variable name with the variable setting.

    _.template("Using 'with': <%= data.answer %>", {variable: 'data'})({answer: 'no'});
    

    model.toJSON() returns a shallow copy or the attributes hash of the model.

    To achieve the equivalent of the above example:

    var model = new Backbone.Model({ name: "Émile" });
    templateFunc(model.toJSON()); // <span>Émile</span>
    

    For Underscore.js before v1.7, the template function signature was a little different:

    _.template(templateString, [data], [settings]) 
    

    If a data object was passed, it didn't returned a function, but returned the rendered template string directly.

    _.template('This is <%= val %>.', { val: "deprecated" });
    // This is deprecated.
    
    0 讨论(0)
提交回复
热议问题