1

Я не могу понять, почему мы проходим в model.toJSON() в этот шаблон:Матричный шаблон метода. Почему мы проходим в модели?

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 
    } 
}); 

Пример приходит от этого tutorial.

this.template(this.model.toJSON()) - это запутанная часть для меня. Метод шаблона, похоже, не соответствует аргументу? Что происходит?

ответ

3

Underscore _.template function принимает строку шаблона в качестве аргумента (и необязательно объект настроек) и возвращает новую предварительно скомпилированную функцию шаблона, которая принимает объект в качестве аргумента.

Этот объект представляет собой данные, используемые в шаблоне:

// creates a template function 
var templateFunc = _.template("<span><%= name %></span>"); 

// render the template using the passed data 
templateFunc({ name: "Émile" }); // <span>Émile</span> 

По умолчанию template помещает значения из данных в локальном объеме через with заявления. Однако вы можете указать одно имя с настройкой variable.

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

model.toJSON() возвращает неполную копию или attributes хэш модели.

Для достижения эквивалента приведенного выше примера:

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

Для Underscore.js before v1.7, функция шаблона подпись была немного другой:

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

Если объект данных был принят, его не возвратил функцию, но сразу же возвратил строку шаблона.

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

О, я вижу. '_.template ($ ('# item-template'). html())' возвращает функцию: 'function (a) {return e.call (this, a, b)}' – Jwan622

+0

@ Jwan622 точно, это выглядит иногда сбивает с толку, потому что представления Backbone имеют свойство 'template', которое мы обычно заполняем возвращаемым значением' _.template'. –

+0

А теперь я понял. Благодаря! – Jwan622

 Смежные вопросы

  • Нет связанных вопросов^_^