错误:初始化前无法在制表器上调用方法;尝试调用方法“ addRow”

时间:2019-02-06 18:57:03

标签: asp.net-mvc tabulator

我有一个带有表格的页面:

<table id="myTable">
        <thead>
            <tr>
                <th>Description</th>
                <th>Qty</th>
                <th>Cost</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
                @Html.EditorFor(model => item);
            }
        </tbody>
    </table>

然后我像这样初始化Tabular:

$("#myTable").tabulator({
    layout: "fitColumns",
    addRowPos: "bottom",
    columns: [
        { title: "Description", field: "Description", editor: "input" },
        { title: "Qty", field: "Quantity", sorter: "number", editor: "number", editorParams: { min: 0, step: 1, } },
        { title: "Cost", field: "Cost", sorter: "number", editor: "number", editorParams: { min: 0, step: 0.1, }, align: "right", formatterParams: { decimal: '.', thousand: '.', symbol: "R" }, bottomCalc: "sum", bottomCalcFormatter: "money", bottomCalcFormatterParams: { decimal: '.', thousand: '.', symbol: "R" } },
        { formatter: "buttonCross", width: 30, align: "center", cellClick: function (e, cell) { cell.getRow().delete(); } },
    ],
});

这一切都很好,但是我尝试添加:

$("#add-row").click(function () {
    $("#myTable").tabulator("addRow", {}, true);
});

单击我的按钮添加新行将导致:错误:初始化前无法在制表器上调用方法;尝试调用方法“ addRow”

我试图做:var table = $("#myTable").tabulator...table.addRow({}),但是我收到一条错误消息,说addRow不是函数。

它应该像这样工作吗?

2 个答案:

答案 0 :(得分:0)

该消息表明您在调用 addRow 函数之前已经创建了Tabulator对象。

如果您是Tabulator的新手,那么我建议您不要使用jQuery包装器。出于遗留原因,旧版本3.5里还有更多内容。

在这种情况下,您应该使用构造函数:

var table = new Tabulator("#myTable", {
    layout: "fitColumns",
    addRowPos: "bottom",
    columns: [
        { title: "Description", field: "Description", editor: "input" },
        { title: "Qty", field: "Quantity", sorter: "number", editor: "number", editorParams: { min: 0, step: 1, } },
        { title: "Cost", field: "Cost", sorter: "number", editor: "number", editorParams: { min: 0, step: 0.1, }, align: "right", formatterParams: { decimal: '.', thousand: '.', symbol: "R" }, bottomCalc: "sum", bottomCalcFormatter: "money", bottomCalcFormatterParams: { decimal: '.', thousand: '.', symbol: "R" } },
        { formatter: "buttonCross", width: 30, align: "center", cellClick: function (e, cell) { cell.getRow().delete(); } },
    ],
});

然后您可以添加以下行:

table.addRow({}, true);

您只需要确保将其分配给 变量时,该变量处于一个可以由需要它的所有函数访问的范围内

答案 1 :(得分:0)

我正在将Tabulator初始化到以<table id="myTable">元素为目标的现有表上。尽管起初效果很好,但尝试尝试其他方法(如我的问题)会导致“错误:初始化前无法在制表器上调用方法”。

我最终报废了预定义的<table>,并在<div id="myTable">上进行了初始化,并通过ajax获取了数据。

现在,所有操作均按预期/已记录。 Dunno,如果这是一个错误/应该像这样/我自己的能力不足,但至少我可以继续。