带动态DTO的下划线模板

时间:2019-01-02 08:49:46

标签: oop design-patterns backbone.js underscore.js

我正在寻找一种可以基于模型创建各种模板的模式。想象一下,我有下面的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中的更改?

1 个答案:

答案 0 :(得分:3)

木偶有一个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
  }
}

因此模板不会受到影响。