Шаблон Backbone/Underscore — зачем при рендеринге вызывать toJSON?

При использовании 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 ()в моих шаблонах?

7
задан EBarr 25 April 2012 в 18:54
поделиться