Spec-Zone.ru › Marionette.js 3

Рендерер Marionette

Рендерер, который Marionette использует для рендеринга данных в шаблон, теперь может быть настроен для каждого класса Marionette.View через функцию Marionette.View.setRenderer. Эта функция заменяет возможность модифицировать внешний Marionette.Renderer. По умолчанию используется метод Marionette.Renderer.render, чтобы документация оставалась актуальной.

Индекс документации

  • Устаревший Marionette.Renderer
  • Настройка рендерера
  • Базовое использование
  • Прескомпилированные шаблоны
  • Настройка выбора и рендеринга шаблонов
  • Использование прескомпилированных шаблонов

Устаревший Marionette.Renderer

Настройка объекта Renderer устарела в пользу метода setRenderer.

Объект Renderer был выделен из процесса рендеринга View, чтобы создать последовательный и многоразовый метод рендеринга шаблона с данными или без них.

Настройка рендерера

Вы можете установить рендерер для класса представления, используя метод класса setRenderer. Рендерер принимает два аргумента. Первый — шаблон, переданный представлению, а второй — данные, которые нужно отобразить в шаблоне. Рендерер должен вернуть строку, содержащую результат применения данных к шаблону.

Marionette.View.setRenderer(function(template, data) {
  return _.template(template)(data);
});

var myView = new Marionette.View({
  template: 'Hello <%- name %>!',
  model: new Backbone.Model({ name: 'World' })
});

myView.render();

myView.el === '<div>Hello World!</div>';

Рендерер также может быть настроен отдельно для любого расширенного представления.

var MyHBSView = Marionette.View.extend();

MyHBSView.setRenderer(function(template, data) {
  return Handlebars.compile(template)(data);
});

var myHBSView = new MyHBSView({
  template: 'Hello {{ name }}!',
  model: new Backbone.Model({ name: 'World' })
});

myHBSView.render();

myHBSView.el === '<div>Hello World!</div>';

Базовое использование

Основное использование Renderer заключается в вызове метода render. Этот метод возвращает строку, содержащую результат применения шаблона Underscore с data в качестве контекста.

var Mn = require('backbone.marionette');
var template = '#some-template';
var data = {foo: 'bar'};
var html = Mn.Renderer.render(template, data);

// do something with the HTML here

Если вы передаёте template, которое приводится к ложному значению, метод render выбросит исключение, сообщая об отсутствии предоставленного шаблона.

Прескомпилированные шаблоны

Если параметр template функции render сам является функцией, рендерер рассматривает её как прескомпилированный шаблон и не пытается скомпилировать его повторно. Это позволяет любому представлению, поддерживающему параметр template, указать прескомпилированную функцию шаблона в качестве настройки template.

var Mn = require('backbone.marionette');
var myTemplate = _.template('<div>foo</div>');

Mn.View.extend({
  template: myTemplate
});

Функция шаблона не должна быть какой-то определённой системой шаблонизации. Она просто должна быть функцией, которая возвращает корректный HTML в виде строки из параметра data , переданного в функцию.

Настройка выбора и рендеринга шаблонов

По умолчанию рендерер принимает либо прескомпилированный шаблон, либо объект селектора jQuery в качестве первого параметра и объект JSON данных в качестве необязательного второго параметра, а также объект представления или CompositeView в качестве необязательного третьего параметра. Если первый параметр не является прескомпилированным, он использует TemplateCache для загрузки шаблона по указанному селектору и рендерит шаблон с предоставленными данными (если таковые имеются) с использованием шаблонов Underscore.

Если вы хотите переопределить способ загрузки шаблона, обратитесь к объекту TemplateCache.

Если вы хотите переопределить используемую систему шаблонизации, измените метод render как вам нужно:

var Mn = require('backbone.marionette');

Mn.Renderer.render = function(template, data, view){
  template += view.getState();
  return $(template).tmpl(data);
};

Это реализация заменит стандартный рендеринг Underscore на рендеринг с помощью jQuery Templates.

Если вы переопределите метод render и хотите использовать механизм TemplateCache, не забудьте включить код, необходимый для извлечения шаблона из кэша, в свой метод render.

var Mn = require('backbone.marionette');

Mn.Renderer.render = function(template, data){
  var template = Mn.TemplateCache.get(template);
  // Do something with the template here
};

Для получения более подробной информации о шаблонах в целом, см. Документацию по шаблонам.

См. Документацию по TemplateCache для более подробной информации.

© 2017 Muted Solutions, LLC
Licensed under the MIT License.
https://marionettejs.com/docs/v3.5.1/marionette.renderer.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API