【发布时间】:2021-04-30 03:34:33
【问题描述】:
我正在尝试使用 Oro 3.1.1 和 Symfony 3.4 使表单动态工作。为了使表单动态,我使用 ajax 发布表单,使用一些侦听器并使用响应 html 字段更新页面,如 Symfony 文档中所述:https://symfony.com/doc/current/form/dynamic_form_modification.html#dynamic-generation-for-submitted-forms
我的问题是某些字段是 select2 或自动完成的,因此它们与 data-page-component-module 相关联。我知道这些字段是在页面第一次渲染时通过 PageComponent render() 函数初始化的,但这在页面加载时运行,我不明白如何渲染来自 ajax 响应的新字段。
我在文档中没有找到任何关于重新渲染页面组件模块的信息,有没有办法可以在 PageController 上触发 page:update 事件?如果是这样,我怎样才能获得控制器的句柄?
js代码基本上是这样的:
require(['jquery'], function($) {
$(document).ready(() => {
const $field1 = $('[name="field1"]');
// ...
const $token = $('[name="_token"]');
const controlGroup = '.control-group';
fieldsToReplace = [
'field2',
// ...
];
const updateForm = () => {
const $form = $(this).closest('form');
const data = {};
data[$token.attr('name')] = $token.val();
data[$field1.attr('name')] = $field1.val();
// ...
$.post($form.attr('action'), data).then((response) => {
fieldsToReplace.forEach((field) => {
$(`[name="${field}"]`)
.closest(controlGroup)
.replaceWith($(response).find(`[name="${field}"]`).closest(controlGroup));
});
$field1 = $('[name="field1"]');
$field1.on('change', updateForm);
});
};
$field1.on('change', updateForm);
});
});
所以我想触发一个事件,在从响应中替换 html 后重建新字段。
提前致谢
【问题讨论】: