javascript backbone.js underscore.js underscore.js-templating

javascript - Método de plantilla de red troncal. ¿Por qué estamos pasando en un modelo?



backbone.js underscore.js (1)

_.template función subrayar _.template toma una cadena de plantilla como argumento (y opcionalmente un objeto de configuración) y devuelve una nueva función de plantilla precompilada que toma un objeto como argumento.

Este objeto son los datos utilizados dentro de la plantilla:

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

De forma predeterminada, la template coloca los valores de sus datos en el ámbito local a través de la instrucción with . Sin embargo, puede especificar un solo nombre de variable con la configuración de variable .

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

model.toJSON() devuelve una copia superficial o el hash de attributes del modelo.

Para lograr el equivalente del ejemplo anterior:

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

Para Underscore.js antes de v1.7 , la firma de la función de plantilla era un poco diferente:

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

Si se pasó un objeto de datos, no devolvió una función, sino que devolvió la cadena de plantilla representada directamente.

_.template(''This is <%= val %>.'', { val: "deprecated" }); // This is deprecated.

No puedo entender por qué estamos pasando un model.toJSON () a esta plantilla:

app.TodoView = Backbone.View.extend({ tagName: ''li'', template: _.template($(''#item-template'').html()), render: function(){ this.$el.html(this.template(this.model.toJSON())); return this; // enable chained calls } });

El ejemplo proviene de este tutorial .

this.template(this.model.toJSON()) es la parte confusa para mí. El método de la plantilla no parece incluir un argumento, ¿verdad? Que esta pasando?