首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OroCrm:动态表单

OroCrm:动态表单
EN

Stack Overflow用户
提问于 2021-01-26 18:45:23
回答 1查看 66关注 0票数 1

我正在尝试使表单与Oro 3.1.1和Symfony 3.4一起动态工作。要使表单动态化,我使用ajax发布表单,使用一些侦听器并使用响应html字段更新页面,如Symfony docs:https://symfony.com/doc/current/form/dynamic_form_modification.html#dynamic-generation-for-submitted-forms中所述。

我的问题是,有些字段是select2或autocomplete,所以它们与data-page-component-module相关联。我知道这些字段是通过PageComponent render()函数在页面第一次呈现时初始化的,但这是在页面加载时运行的,我不知道如何呈现来自ajax响应的新字段。

我在文档中没有找到任何关于重新呈现页面组件模块的内容,有什么方法可以在PageController上触发page:update事件吗?如果是这样,我如何才能获得控制器的句柄?

基本上,js代码是这样的:

代码语言:javascript
复制
        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之后重建新的字段。

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2021-02-09 23:23:11

根据核心中的示例,必须在新的HTML元素上触发content:changed事件。例如,请参见https://github.com/oroinc/orocommerce/blob/89631c4/src/Oro/Bundle/PromotionBundle/Resources/public/js/app/views/discount-options-view.js#L49-L53

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65899856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档