【问题标题】:Automatically create header from JSON file, Bootstrap-table从 JSON 文件,Bootstrap-table 自动创建标头
【发布时间】:2016-06-07 06:40:45
【问题描述】:

我正在使用this 引导库,实际上一切正常。问题是,bootstrap-table 能否根据 JSON 文件自动生成标头?我试图找到有关此的任何信息,但不走运。现在我的标题是从这个例子中的脚本生成的:

function initTable() {
$table.bootstrapTable({
    height: getHeight(),
    columns: [{
        field: 'field1',
        title: 'title1',
        sortable: true

    }, {
        field: 'field2',
        title: 'title2',
        sortable: true
    }, {
        field: 'field3',
        title: 'title3',
        sortable: true
    }, {
        field: 'Actions',
        title: 'Item Operate',
        align: 'center',
        events: operateEvents,
        formatter: operateFormatter
    }
    ],
    formatNoMatches: function () {
        return "This table is empty...";
    }

});

有人如何自动生成标题吗?

【问题讨论】:

    标签: javascript json twitter-bootstrap bootstrap-table


    【解决方案1】:

    从一个平面 json 文件填充绝对是可能的,但比从一个单独的(更小和准备好的)数据请求更难,因为标题和其他属性“可能”必须被猜测。

    我将展示基本方法,然后告诉你如何使它工作,如果卡在一个你可以或不能影响格式的平面文件(重要点,请参阅末尾的注释)。


    发出单独的 ajax 请求,填充 var colArray = [],或直接在 done 回调中传递。

    例如在回调中(.done(),.success(), 等)也调用了包含该表的js init代码的函数。

    你可以让它看起来像这样:

    function initTable(cols) {
        cols.push({
                field: 'Actions',
                title: 'Item Operate',
                align: 'center',
                events: operateEvents,
                formatter: operateFormatter
            });
        $("#table").bootstrapTable({
            height: getHeight(),
            columns: cols,
            formatNoMatches: function () {
                return "This table is empty...";
            }
    
        });
    }
    
    $(document).ready(function(){
        $.ajax({
          method: "POST",
          url: "data/getColumns",
          // data: { context: "getColumns" }
          datatype: "json"
        })
        .done(function( data ) {
           console.log( "getCols data: ", data );
           // Prep column data, depending on what detail you sent back
           $.each(data,function(ind,val){
               data.sortable = true;
           });
           initTable(data);
        });
    });
    

    现在,如果您实际上被一个平面文件所困扰,请将 ajax 指向该文件,然后意识到问题是您是否可以编辑内容。

    如果是,则添加一个columns 数组,其中包含您需要帮助构建列数组的任何基本数据(标题、字段名等)。然后使用 responseHandler 如果需要剥离列数组,如果它在加载到表时导致问题。

    http://bootstrap-table.wenzhixin.net.cn/documentation/#table-options http://issues.wenzhixin.net.cn/bootstrap-table/(点击“查看源代码”)。


    如果不是,您不能编辑内容,并且只有字段名,然后查看在 .done() 处理程序中使用任何字符串操作(str_replace() 等),您需要使其看起来像您想要的方式.

    【讨论】:

    • Daniel Brose,这是一个非常有用的详细描述答案,非常感谢,我正在弄清楚它是如何工作的。在函数 initTable 中设置并推送“列”,因此它将为不同的表生成相同名称的列,但是如果表有不同的标题怎么办?
    • @Anton - 你是说栏目标题吗?您将需要决定您不能假设哪些信息,然后确保在数据请求中传递这些信息,无论是使用正确的命名方案(因此可以直接加载)还是您可以从中构建列数组对象的其他形式。如果差异有限,您始终可以为列数组对象提供多个“模板”,根据传递的键加载适当的部分集合或组合。这意味着您可以将 X 个唯一字符串传回,然后 $.inArray() 或类似于 .push() 匹配对象/s 从所有可能性的列表中。
    • @Anton - github.com/wenzhixin/bootstrap-table/issues/2081 的工作解决方案和链接主题