簡體   English   中英

當另一列為真/假時,數據表編輯器顯示/隱藏編輯行中復選框列表的復選框

[英]Datatables Editor show/hide a checkbox of a list of checkbox in edit row when another column is true/false

我是數據表和編輯器的新手。

我需要幫助來隱藏或顯示復選框列表的某些元素,這取決於 boolean “已刪除”是真還是假。 編輯該行時會顯示該復選框,但我需要顯示將其已刪除列設置為 false 的人員的姓名。

我有兩張桌子,再加上一張參考第一張和第二張的桌子。 第一個表是“person”,具有 FirstName、LastName、age 和 ID 自動增量以及已刪除標志。 第二個表是“機構”,僅包含名稱、ID 自動增量和已刪除標志。

這是我的 php 代碼:

<?php

include('configDB.php');
include('lib/DataTables.php');

date_default_timezone_set('UTC');

use
    DataTables\Editor,
    DataTables\Editor\Field,
    DataTables\Editor\Format,
    DataTables\Editor\Mjoin,
    DataTables\Editor\Options,
    DataTables\Editor\Upload,
    DataTables\Editor\Validate,
    DataTables\Editor\ValidateOptions;

Editor::inst($db, 'agency', 'ID')
    ->fields(
            Field::inst( 'agency.Name' )->setFormatter(Format::ifEmpty(null)),
            Field::inst( 'agency.deleted' )->setFormatter(Format::ifEmpty(false))
    )
    ->join(
        Mjoin::inst( 'person' )
            ->link( 'agency.ID', 'job.IDagency' )
            ->link( 'person.ID', 'job.IDperson' )
            ->order( 'FirstName asc' )
            ->fields(
                Field::inst( 'deleted' )->setFormatter(Format::ifEmpty(false)),
                Field::inst( 'FirstName' )->setFormatter(Format::ifEmpty(null)),
                Field::inst( 'ID' )
                    ->validator( 'Validate::required' )
                    ->options( Options::inst()
                        ->table( 'person' )
                        ->value( 'ID' )
                        ->label( 'FirstName' )
                    )
            )
            ->where('person.deleted', 0, '=')
    )
    ->process( $_POST )
    ->json();
?>

這里是我的 index.js 文件:

editor_agency = new $.fn.dataTable.Editor({
        ajax:'agency_table_backend.php',
        table:'#agency_table',
        fields: [
            {
                name: 'agency.Name',
                label: 'Agency name:',
                type: 'textarea'
            },{
                name: 'person[].deleted',
            },{
                name: 'person[].ID',
                label: "Person name:",
                type: "checkbox"
            },{
                name: 'agency.deleted'
            }
        ]
    });

let table = $('#agency_table').DataTable({
        dom: "Bfrtip",
        select: true,
        serverSide: true,
        processing: true,
        responsive: true,
        ajax: {
            type: 'POST',
            url: 'agency_table_backend.php'
        },
        columns: [
            {
                data: 'agency.Name',
                orderable: true,
                searchable: true
            },{
                data: 'person',
                render: '[, ].deleted',
                orderable: false,
                searchable: false
            },{
                data: 'person',
                render: '[, ].FirstName',
                orderable: false,
                searchable: false
            },{
                data: 'agency.deleted',
                orderable: false,
                searchable: false
            }
        ], // END columns
        buttons:[
            {
                extend: 'create',
                editor: editor_agency,
                text: 'Add agency',
                formTitle: '<h3>Add agency</h3>'
            },{
                extend: 'edit',
                editor: editor_agency,
                text: 'Edit agency',
                formTitle: '<h3>Edit agency</h3>'
            },{
                extend: 'remove',
                editor: editor_agency,
                text: 'Delete agency',
                formTitle: '<h3>Delete agency</h3>'
            }
            ,{
                extend: "selectedSingle",
                editor: editor_agency,
                text: "Delete FLAG agency",
                action: function ( e, dt, node, config ) {
                    var confirmDeleteA = confirm("Are you sure to remove selected agency ?");
                    if(confirmDeleteA){
                        editor_agency
                            .edit( table.row( { selected: true } ).index(), false )
                            .set( 'agency.deleted', 'true' )
                            .submit();
                    }
                }
            },{
                extend: "selectAll",
                editor: editor_agency,
                text: "RESTORE all agency",
                action: function ( e, dt, node, config ) {
                    var confirmRestoreA = confirm("Are you sure to restore all agency ?");
                    if(confirmRestoreA){
                        editor_agency
                            .edit( table.row( { selected: true } ).index(), false )
                            .set( 'agency.deleted', '' )
                            .submit();
                    }
                }
            }
        ], // END buttons
        rowCallback: function( row, data, index ) {
            if (Number(data.agency.deleted).toFixed(0) == 1) {
                $(row).addClass('hidden');
            }else{
                $(row).removeClass('hidden');
            }
        }
    }); // END table

我知道何時隱藏已刪除列的列,但我沒有這樣做以查看它是否有效。

在此先感謝,布萊德沃爾夫

我在 DataTables and Editor 的公共文檔中找到了解決方案:在“SearchPaneOptions class”的第 4 點輸入鏈接描述

我改變了這個:

Field::inst( 'ID' )
                    ->validator( 'Validate::required' )
                    ->options( Options::inst()
                        ->table( 'person' )
                        ->value( 'ID' )
                        ->label( 'FirstName' )
                    )

有了這個:

Field::inst( 'ID' )
                    ->validator( 'Validate::required' )
                    ->options( Options::inst()
                        ->table( 'person' )
                        ->value( 'ID' )
                        ->label( 'FirstName' )
                        ->where(function($q){
                            $q->where('deleted', 0);
                        })
                    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM