При использовании backbone.js и сопутствующего механизма шаблонов в подчеркивании я заметил, что большинство примеров вызывают model.ToJSON()
при рендеринге вместо того, чтобы просто передавать model
. Я понимаю, что мой шаблон должен изменить способ получения данных.
Мне интересно, почему и какую пользу мы получаем от toJSON ()?
Типичный пример
В типичном примере model.toJSON()
вызывается при рендеринге. Обратите внимание: для краткости я вставил шаблон в виде строкового литерала.
ToDoItemView = Backbone.View.extend({
/* other viewey stuff */
template : _.template( '<li><%=ToDoNote%></li>'),
render : function () {
var out= this.template(this.model.toJSON()); //<--JSON
$(this.el).html( out) }
return this;
}
}); //end view
Альтернативный метод
Я перерыл магистраль 0.9.2 и подчеркивал код 1.3.3. В магистрали заметил, что model.toJSON()
делает следующее:_.clone(this.attributes)
. Внутри механизма рендеринга шаблонов мой скомпилированный шаблон называет переданные -данные obj .
Увидев эти фрагменты, я понял, что клонирование атрибутов не обязательно. Вместо этого я могу напрямую передать свою модель (, хотя и с некоторыми изменениями синтаксиса в шаблоне ). Что-то вроде...
ToDoItemView = Backbone.View.extend({
/* other viewey stuff */
template : _.template( '<li><%=obj.get('ToDoNote')%></li>'), //<--notice GET()
render : function () {
var out= this.template(this.model); //<-- look ma no json
$(this.el).html( result ) }
return this;
}
}); //end view
Глядя на два примера, единственные причины, по которым я могу вызвать toJSON, это:
obj[ namepart + someindex]
)Мой вопрос сводится к :почему я должен вызывать toJSON()
и принимать удар за клонирование свойств, а не просто использовать get ()в моих шаблонах?