Шаблон подчеркивания с динамическим DTO

Я ищу шаблон, в котором я могу создавать различные шаблоны на основе модели. Представьте, что у меня ниже функция getDTO.

export const getDTO => [
  { 'title': 'title one', 'body': 'sample paragraph one' },
  { 'title': 'title two', 'body': 'sample paragraph two' },
]

Я использую следующий шаблон подчеркивания для визуализации DTO.

<script type = "text/template">
  <h1><%= title %></h1>
  <p><%= body %></p>
</script>

Он отлично работает, пока я не сохраню DTO прежним. Если я изменю свой DTO с какой-либо целью, это прервёт рендеринг шаблона.

Теперь вопрос в том, есть ли какой-либо шаблон для того, чтобы шаблон всегда отражал изменения в моем DTO?

В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Принцип подстановки Лискова
Принцип подстановки Лискова
Принцип подстановки Лискова (LSP) - это принцип объектно-ориентированного программирования, который гласит, что объекты суперкласса должны иметь...
1
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У Marionette есть метод serializeData, который действует как слой между шаблоном и моделью данных.

Если вы измените что-либо в модели данных или в шаблоне, вы можете внести соответствующие корректировки в serializeData вместо обновления обоих мест.

Точно так же, если вы не хотите, чтобы изменения в вашей модели данных влияли на шаблон, вы можете создать между ними слой.

Например, если вы измените

export const getDTO => [
  { 'title': 'title one', 'body': 'sample paragraph one' },
  { 'title': 'title two', 'body': 'sample paragraph two' },
]

к

export const getDTO => [
  { 'heading': 'title one', 'body': 'sample paragraph one' },
  { 'heading': 'title two', 'body': 'sample paragraph two' },
]

Вы обновляете свой слой из

serializeData(dto){
   return dto;
}

к

serializeData(dto){
  return {
    title: dto.heading
  }
}

следовательно, ваш шаблон останется неизменным.

Другие вопросы по теме