Мы используем библиотеку закрытия и компилятор закрытия, и мы хотим использовать шаблоны закрытия.
Но шаблоны закрытия не имеют наследования. Это действительно проблема для нас.
Насколько я понимаю, причина, по которой шаблоны закрытия не имеют наследования, заключается в том, что шаблоны должны быть простыми и легко читаемыми.
Но как жить без наследования в больших проектах?
Например, у нас есть файл шаблона button.soy, который создает кнопку с общедоступным шаблоном project.createButton
и частными шаблонами: project.createOpenTag_
, project.createCSSClasses_
, project.createAttributes_
, project.createContent_
, project.createCloseTag_
.
У нас есть класс JavaScript project.Button
и project.ButtonCircle
(возможно, этот отдельный класс project.ButtonCircle
кажется ненужным, но это просто пример), который расширяет project.Button
.
project.ButtonCircle
необходимо внести небольшие изменения в шаблон project.createButton
.
Конечно, мы можем добавить новый функционал в project.createButton
, но это очень плохая идея, потому что такой подход создаст шаблоны монстров в будущем.
Или мы можем создать общедоступный шаблон project.createCircleButton
в файле button-circle.soy, вызывать в нем все приватные шаблоны из project.createButton
, и когда нам нужно «переопределить» один из этих приватных шаблонов (например, project.createCSSClasses_
) , мы просто создаем новый приватный шаблон в button-circle.soy с именем project.createCSSClassesCirbleButton_
.
Однако в этом случае нам нужно скопировать и вставить все содержимое с project.createButton
на project.createCircleButton
. Это ужасно.
Также мы пробовали использовать шаблоны делегатов, но они не подходят для наследования.
Каков подход к этой проблеме?