我想包含一些模板并在按钮点击时附加(通过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。