【问题标题】:OroCrm: Dynamic FormOroCrm:动态表单
【发布时间】: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 后重建新字段。

提前致谢

【问题讨论】:

    标签: orocrm chaplinjs


    【解决方案1】:

    根据核心中的示例,您必须在新的 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

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 2019-06-14
      • 2017-04-29
      • 1970-01-01
      • 2012-11-05
      • 2014-03-22
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多