我正在尝试使表单与 Oro 3.1.1 和 Symfony 3.4 一起使用。为了使表单动态,我使用 ajax 发布表单,使用一些侦听器并使用响应 html 字段更新页面,如 Symfony 文档中所述:https ://symfony.com/doc/current/form/dynamic_form_modification.html#dynamic -代提交的表格
我的问题是某些字段是 select2 或自动完成,因此它们与data-page-component-module
. 我知道这些字段是在页面第一次渲染时通过 PageComponentrender()
函数初始化的,但这在页面加载时运行,我不明白如何渲染来自 ajax 响应的新字段。
我在文档中没有找到任何关于重新渲染页面组件模块的信息,有没有办法可以page:update
在 PageController 上触发事件?如果是这样,我怎样才能得到控制器的句柄?
基本上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 之后重建新字段。
提前致谢