【问题标题】:is possible update data with one request?是否可以通过一个请求更新数据?
【发布时间】:2018-11-11 05:34:39
【问题描述】:

我在 OctoberCMS 中有一个插件组件。我用一个带有编辑和删除按钮的表格显示我的转发器数据。例如,当我单击一个项目的删除按钮时 data-request="onDeletePackage" 正在调用并且 PHP 删除了该项目并使用 ajaxFramework 刷新了表。

但我想获取所有数据并对其进行处理,例如何时单击删除、不请求服务器的项目以及单击保存服务时转发器填充数据。

这是我的代码

//php code 

public function onDeletePackage()
    {

        $packages = Session::get('packages');
        if (post('id') !== null) {
            $id = post('id');
            unset($packages[$id]);
        }

        Session::put('packages', $packages);
        $this->page['packages'] = $packages;
        $this->page['service'] = new Service();
    }
{% if packages %}
    <table class="table table-hover dataTable" id="table2">
        <tbody>
        {% set cnt = 1 %}
        {% for key,item in packages %}
            {% if item.is_rejected ==false %}
            <tr>
                <td>{{ cnt }}</td>
                <td>{{ item.receiver_postal_code }}</td>
                <td>{{ item.receiver_address }}</td>
                <td>{{ service.getPostType(item.post_type_id) }}</td>
                <td>{{ service.getPackageType(item.package_type_id) }}</td>
                <td>{{ item.package_number }}</td>
                <td>{{ service.getWeight(item.weight_id) }}</td>
                <td>
                    <a
                            href="#"
                            class="btn btn-default btnEdit"
                            data-toggle="modal"
                            data-target="#package-modal"
                            data-id="{{ key }}"

                    >
                        <i class="fa fa-edit"></i>
                    </a>

                    <a
                            href="#"
                            class="btn btn-default"
                            data-request="onPackageDelete"
                            data-request-data="id:{{ key }}"
                            data-request-update="'{{ __SELF__ }}::_packages':'.showPackages'"
                    >
                        <i class="fa fa-trash"></i>
                    </a>
                </td>
            </tr>
            {% endif %}
            {% set cnt = cnt + 1 %}
        {% endfor %}
        </tbody>
    </table>
{% endif %}

<script type="text/javascript">
    $(document).ready(function () {
        $(".btnEdit").click(function () {

            id = $(this).attr('data-id');
            $("input[name='package_id']").val(id);

             packages={{ packages|json_encode|raw }};
            $("input[name='receiver_postal_code']").val(packages[id].receiver_postal_code);
            $("input[name='receiver_address']").val(packages[id].receiver_address);
            $("select[name='weight_id']").val(packages[id].weight_id).change();
            $("select[name='post_type_id']").val(packages[id].post_type_id).change();
            $("select[name='package_type_id']").val(packages[id].package_type_id).change();
            $("select[name='insurance_type_id']").val(packages[id].insurance_type_id).change();
            $("select[name='distribution_time_id']").val(packages[id].distribution_time_id).change();
            $("select[name='special_services_id']").val(packages[id].special_services_id).change();
            $("input[name='package_number']").val(packages[id].package_number);

            $('#package-modal').find('.modal-title').text('فرم ویرایش بسته');


        });

        $("#btn-newPack").click(function () {
            $('#my-form')[0].reset();
            $('span.select2-selection__rendered').text('انتخاب کنید');
            $("input[name='package_id']").val("");
            $('#package-modal').find('.modal-title').text('فرم ایجاد بسته جدید');


        });
    });


</script>

【问题讨论】:

  • 可能只是使用转发器数据并显示包含隐藏字段[containing single data-set]的表格行,删除do not use ajax只是remove element div/row etc containing hidden fields so it removed所以当你点击保存它会发送only available hidden fields data所以你得到它们并保存它们with single request 可能是。

标签: octobercms octobercms-plugins


【解决方案1】:

你可以改变

<tr> to <tr id="pk{{ key }}"> 

然后替换

data-request-update="'{{ __SELF__ }}::_packages':'.showPackages'"

data-request-success="removeRow({{ key }});"

最后将它添加到你的 JS 中

removeRow function(key){
 $('#pk'+ key ).remove();
}

我想你也可以删除

    $this->page['packages'] = $packages;
    $this->page['service'] = new Service();

来自你的 PHP onDeletePackage()

【讨论】:

    猜你喜欢
    • 2020-03-03
    • 2012-07-17
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2020-02-06
    • 2020-05-16
    相关资源
    最近更新 更多