Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Como tratar um campo booleano em um datalist

Busco os dados de uma tabela. e no campo ativo, onde retorna true ou false, gostaria de colocar (Sim/Não), populando com ajax. segue abaixo o código:


$(document).ready(function() { 
        recordTable = $("#simple-record-table").DataTable( {
            ajax : {
                "processing": true,
                "format": "jsonp",
                "url" : "<?= $this->url->getUrlController() ?>/getAll/<?= $tipo ?>",
                "dataFilter" : function(json) {
                    var json = $.parseJSON( json );
                    json.data = $.map(json.usuarios, function(e) { return e });
                    recordList = json.usuarios;
                    return JSON.stringify( json );
                }
            },
            columnDefs: [
                {
                    targets: [0, 4],
                    className: 'dt-middle text-center'
                },
                {
                    targets: [1, 2, 3],
                    className: 'dt-middle'
                }
            ],
            columns: [
                {"data": "id" },
                {"data": "nome" },
                {"data": "cpf" },
                {"data": "ativo" },
                {
                    sortable: false,
                    render: function ( row, type, val, meta ) { 
                        return '<span class="btn btn-sm btn-warning glyphicon glyphicon-pencil" aria-hidden="true" onclick="editRecord('+val.id+',\''+val.nome+',\''+val.cpf+',\''+val.ativo+'\')"></span> '+
                            '<span class="btn btn-sm btn-danger glyphicon glyphicon-trash" aria-hidden="true" onclick="removeRecord('+val.id+',\''+val.nome+'\')"></span>';
                    }
                }                
            ]
        });
    });
6 respostas

Fala ai Fernanda, tudo bem? Você pode fazer de N jeitos isso, o mais simples seria fazer um if ternário, algo assim:

\''+val.ativo ? 'Sim' : 'Não' +'\'

Caso o valor de val.ativo seja true ela vai retornar o código do ?, caso ele seja false, vai retornar o :.

Basicamente o ? seria o if e o : seria o else.

Espero ter ajudado.

O problema, é que se faço direto o teste ternário no render, é que ele assume como mais uma coluna na tabela. Onde devo colocar este teste??

Fala Fernanda.

Você pode colocar no mesmo lugar que hoje já tem o val.ativo, faz o ternário direto lá dentro da concatenação do span.

Espero ter ajudado.

mas é q eu passo o objeto inteiro no render.. Dentro do span é outra coluna. Ou coloco antes de chamar o render?

 render: function ( row, type, val, meta ) { 
                        return '<span class="btn btn-sm btn-warning glyphicon glyphicon-pencil" aria-hidden="true" onclick="editRecord('+val.id+',\''+val.nome+',\''+val.cpf+',\''+val.ativo+'\')"></span> '+
                            '<span class="btn btn-sm btn-danger glyphicon glyphicon-trash" aria-hidden="true" onclick="removeRecord('+val.id+',\''+val.nome+'\')"></span>';
                    }
solução!

Entendi Fernanda, bom, tenta colocar antes do render, não tenho muito contexto da arquitetura do seu projeto, não sei dizer se daria certo ou não.

Espero ter ajudado.

columns: [
                {"data": "id" },
                {"data": "nome" },
                {"data": "cpf" },
                {"data": "ativo",
                    render: function ( row, type, val, meta ) {
                        return val?'<span class="glyphicon glyphicon-ok-circle"></span>':
                        '<span class="glyphicon glyphicon-ok-circle"></span>';
                    }
                },
                {
                    sortable: false,
                    render: function ( row, type, val, meta ) { 
                        return '<span class="btn btn-sm btn-warning glyphicon glyphicon-pencil" aria-hidden="true" onclick="editRecord('+
                        val.id+',\''+val.nome+'\''+',\''+val.cpf+'\''+','+val.ativo+')"></span>'+
                            '<span class="btn btn-sm btn-danger glyphicon glyphicon-trash" aria-hidden="true" onclick="removeRecord('+val.id+',\''+val.nome+'\')"></span>';
                    }
                }