Мы используем библиотеку закрытия и компилятор замыкания, и мы хотим использовать шаблоны закрытия.
Но шаблоны закрытия не имеют наследования. Это действительно проблема для нас.
Как я понимаю, причина, по которой шаблоны закрытия не имеют наследования, заключается в том, что шаблоны должны быть простыми и легко читаемыми.
Но как вы можете жить без наследования в больших проектах?
Например, у нас есть шаблонный файл 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
. Это ужасно.
Также мы попытались использовать шаблоны делегирования, но это не подходит для наследования.
Что такое подход к этой проблеме?