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分支,在生成时只看到一个include。但是,是否有一些选项可以为每个新包含的副本重新发送包含的模板?或者可以通过其他方式为每个包含的模板设置不同的UUID。

更新

uuid()是一个自定义的分支函数

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

您可以通过ajax调用字符串替换来实现这一点。

字符串替换

Twig模板(translationPart.titch(

{% 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。

最新更新