Twig 包含重新渲染

Twig include with rerender

我想包含一些模板并在按钮点击时附加(通过 js),我需要每个包含的模板都有一个唯一的 ID。

这是我附加模板的逻辑:

<button type="submit" id="addTranslationFields">Add translations</button>
// and js
$('#addTranslationFields').on('click', function (event) {
   event.preventDefault();
   event.stopPropagation();

   let part = `{% include 'translationPart.twig' with {'languages': languages,}%}`;
   $('.table tbody').append(part);
});

这是我在 translationPart.twig

中生成 uuid 的方法
    {% set uuid = uuid() %}
    {{ uuid }}

问题是所有创建的模板的 UUID 都相同。我明白为什么会这样,它是服务器端生成的 b-z twig,在生成的那一刻,它只看到一个包含。但是是否有一些选项可以为每个新包含的副本重新呈现包含的模板?或者可以通过其他方式为每个包含的模板设置不同的 UUID。

已更新

uuid() 是一个自定义的树枝函数

$twig->addFunction(
    new TwigFunction(
        'uuid',
        static function(): string {
             return Uuid::uuid4()->toString();
        }
    )
);

您可以通过 ajax 调用 字符串替换 .

来实现

字符串替换

Twig 模板(translationPart.twig)

{% set uuid = '#_SOME_STRING_TO_REPLACE_#' %} 
{{ uuid }}

Javascript

<button type="submit" id="addTranslationFields">Add translations</button>
// and js
$('#addTranslationFields').on('click', function (event) {
   event.preventDefault();
   event.stopPropagation();

   let generatedUuid = generateUuidByJavascript();

   let part = `{% include 'translationPart.twig' with {'languages': languages,}%}`.replace('#_SOME_STRING_TO_REPLACE_#', generatedUuid);
   $('.table tbody').append(part);
});

Uuidjs可用于生成uuid。