Mam dziwne zachowanie podczas korzystania z SetColumns - formatery nie są już rozpoznawane:

"błąd formated - nie znaleziono takiego formatu: selectfilter"

Jeśli wyłączę linię Table.setColumns (), wersja lokalna działa tylko w porządku, a formatter Selectfilter działa.

Wersja Tabulatora wynosi 4,9

Co to spowodowałoby?

Html:

    <span id="link_text">...</span>
    <br>
    <div align="center" id="status_table"></div>

Kod javascript:

<script>
var dataObject = [];
var selectFilter = function(cell, formatterParams){
        var data = cell.getRow().getData();
        var display = "<button> A button </button>";
        return display;
};

var status_table = new Tabulator("#status_table",{
    data:dataObject,
    layout:'fitColumns',
    columns:[
             {title:"Select", hozAlign:"center", field:"open_link", width:200, formatter:selectFilter}
            ],
});

update();

function update() {
    $.ajax({url: PageUrl, 
    success: function(result){
        projectData = result;
        definitionsData = result['definitions'];
        columnData = result['columns'];
        tableData = result['table_data'];
        status_table.setData(tableData);
        document.getElementById("status_table").style.width = definitionsData['width'];
        //status_table.setColumns(columnData);  // if enabled, error happens, other column information comes from JSON correctly
    
    }});
} 
</script>

Oto JSON:

[
  {
    "definitions": [
      {
        "width": "400px"
      }
    ],
    "columns": [
      {
        "title": "First",
        "hozAlign": "left",
        "field": "project_description",
        "width": 200,
        "headerSort": true
      },
      {
        "title": "Second",
        "hozAlign": "left",
        "field": "open_link",
        "width": 100,
        "formatter": "selectFilter",
        "headerSort": true
      },
      {
        "title": "Third",
        "hozAlign": "left",
        "field": "open_link",
        "width": 100,
        "headerSort": true
      }
    ],
    "table_data": [
      {
        "first_column": "Col 1",
        "open_link": "left"
      }
    ]
  }
]

0
Eki 12 luty 2021, 22:08

1 odpowiedź

Najlepsza odpowiedź

Problem jest na dwóch różnych sposobach definiowania niestandardowego formatu.

Po zainicjowaniu instancji tabulatora odwołujesz się do funkcji. Kiedy setColumns(), na podstawie zwróconych danych AJAX JSON, odwołujesz się do łańcucha, który może być powiązany tylko z definicją modułu formatu Curtom. W twoich zwróconych danych JSON. "formatter": "selectFilter" Działa tylko wtedy, gdy zdefiniujesz selectFilter w module formatu Tabulatora. Możesz zdefiniować niestandardowy formatter jako:

Tabulator.prototype.extendModule("format", "formatters", {
    selectFilter: function(cell, formatterParams){
        var data = cell.getRow().getData();
        var display = "<button> A button </button>";
        return display;
    },
});

I zawsze ustaw formated kolumny z "formatter": "selectFilter",.

1
haferje 2 marzec 2021, 20:43