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