Эти теги несколько сбивают с толку, поскольку реализован как UIComponent, а логика находится в TagHandler. При построении дерева компонентов, например, на этапе restoreView, добавляется один компонент UIRepeat, но # {template.id} не будет оцениваться должным образом. Он не будет оцениваться, потому что переменная UIRepeat "template" будет доступна только во время обработки компонента, а не во время построения дерева.
У вас есть два варианта. Во-первых, вы можете использовать вместо . Это простое решение и, вероятно, будет хорошо работать для вас. В этом есть один минус: если у вас есть несколько экземпляров одного и того же шаблона, дерево компонентов будет содержать отдельную копию компонентов шаблона для каждого экземпляра. Как следствие, производительность памяти и процессора пострадает.
Другой вариант - использовать настоящий компонент динамического включения. К сожалению, я не нашел ни одного доступного. Мне удалось реализовать такой компонент, но это не очень удобное решение, поскольку для него также требуется слегка измененная версия UIRepeat. Мы должны были пойти на этот подход, потому что потеря производительности из была слишком большой для нас.