2016-11-25 56 views
1

bootstrap-tableプラグインを使用してjsonデータをテーブルにレンダリングします。データは正常に読み込まれますが、プラグインはデータをテーブルにレンダリングしません。ちょうどNo matching records foundと表示されます。ブートストラップテーブルはJSONデータをレンダリングしませんが、正常にロードします。

私はドキュメントの例を以下してきた

は、the example I almost copy-pastedによると、あなたがデータをロードしてレンダリングするために任意のメソッドを使用する必要はありませんが、あなただけ指定する必要があり、loadrefreshのようなメソッドを使用しようとしましたdata-url属性(tableタグ)、または、urlプロパティをjsファイルの表オブジェクトに追加します。私は両方の変種を試しましたが、どちらもうまくいかなかったようです。ここで

は、私は私のテーブルを定義する方法は次のとおりです。

<h1>Table</h1> 
<div id="toolbar"> 
    <button id="remove" class="btn btn-danger" disabled=""> 
     <i class="glyphicon glyphicon-remove"></i> 
     Delete 
    </button> 
</div> 

<table 
    id="table" 
    data-url="/books/all" 
    data-toolbar="#toolbar" 
    data-search="true" 
    data-sortable="true" 
    data-show-refresh="true" 
    data-show-toggle="true" 
    data-show-columns="true" 
    data-show-export="true" 
    data-detail-view="true" 
    data-detail-formatter="detailFormatter" 
    data-minimum-count-columns="2" 
    data-show-pagination-switch="true" 
    data-pagination="true" 
    data-id-field="id" 
    data-page-list="[10, 25, 50, 100, ALL]" 
    data-show-footer="false" 
    data-side-pagination="server" 
    data-response-handler="responseHandler"> 
</table> 

/books/allは、このようなJSONデータを返します。

[{"id":42 
    "name":"whatever", 
"description":"whatever" 
"cover_img":"https://whatever.jpg" 
"available_count":10, 
"price":6.99, 
"author_id":21, 
"publisher_id":5, 
"author_first_name":"Harper", 
"author_last_name":"Lee", 
"author_birthday":"1926-04-27T22:00:00.000Z", 
"publisher_name":"Penguin Fiction"},...] 

私はjsの中で私の列を定義:

let $table = $('#table'), 
    $remove = $('#remove'), 
    selections = []; 

const initTable =() => { 
    $table.bootstrapTable({ 
     url: '/books/all', 
     height: getHeight(), 
     columns: [ 
      [ 
       { 
        field: 'state', 
        checkbox: true, 
        rowspan: 2, 
        align: 'center', 
        valign: 'middle' 
       }, { 
        title: 'Book ID', 
        field: 'id', 
        rowspan: 2, 
        align: 'center', 
        valign: 'middle', 
        sortable: true, 
        footerFormatter: totalTextFormatter 
       }, { 
        title: 'Book Detail', 
        colspan: 3, 
        align: 'center' 
       } 
      ], 
      [ 
       { 
        field: 'name', 
        title: 'Book Name', 
        sortable: true, 
        editable: true, 
        align: 'center', 
        footerFormatter: totalNameFormatter 
       }, { 
        field: 'price', 
        title: 'Book Price', 
        sortable: true, 
        align: 'center', 
        editable: { 
         type: 'text', 
         title: 'Book Price', 
         validate(value) { 
          value = $.trim(value); 

          if (!value) { 
           return 'This field is required'; 
          } 

          if (!/^\$/.test(value)) { 
           return 'This field needs to start with $'; 
          } 

          const data = $table.bootstrapTable('getData'), 
            index = $(this).parents('tr').data('index'); 
          console.log(data[index]); 
          return ''; 
         } 
        }, 
        footerFormatter: totalPriceFormatter 
       }, { 
        field: 'operate', 
        title: 'Book Operate', 
        align: 'center', 
        events: operateEvents, 
        formatter: operateFormatter 
       } 
      ] 
     ] 
    }); 

    setTimeout(() => { 
     $table.bootstrapTable('resetView'); 
    }, 200); 

    $table.on('check.bs.table uncheck.bs.table ' + 
     'check-all.bs.table uncheck-all.bs.table', 
     () => { 
      $remove.prop('disabled', !$table.bootstrapTable('getSelections').length); 

      selections = getIdSelections(); 
    }); 

    $table.on('expand-row.bs.table', (e, index, row, $detail) => { 
     if (index % 2 == 1) { 
      $detail.html('Loading from ajax request...'); 
      $.get('LICENSE', res => { 
       $detail.html(res.replace(/\n/g, '<br>')); 
      }); 
     } 
    }); 

    $table.on('all.bs.table', (e, name, args) => { 
     console.log(name, args); 
    }); 

    $remove.click(() => { 
     const ids = getIdSelections(); 
     $table.bootstrapTable('remove', { 
      field: 'id', 
      values: ids 
     }); 
     $remove.prop('disabled', true); 
    }); 

    $(window).resize(() => { 
     $table.bootstrapTable('resetView', { 
      height: getHeight() 
     }); 
    }); 
}; 


function getIdSelections() { 
    return $.map($table.bootstrapTable('getSelections'), row => row.id) 
} 

function responseHandler(res) { 
    $.each(res.rows, (i, row) => { 
     row.state = $.inArray(row.id, selections) !== -1; 
    }); 
    return res; 
}; 

load-success.bs.tableイベントは、ページまたはタをリフレッシュするたびにデータを受け取りますble。 responseHandle関数も同様に起動され、同じ有効なデータを受け取ります。

JSONデータ形式が有効であると私はちょうど/books/all要求から応答をコピーし、(ちょうどcolumnsプロパティ後)bootstrapTable初期化オブジェクトにdataプロパティに貼り付けた場合、データが正常にレンダリングされます。


あなたは私が間違ってやっているかを理解し、その問題を解決するために私を助けてもらえますか?

答えて

0

は、私はあなたがちょうどそれが行数を指定するJSONに追加情報が欠落していると思うし、行内の実際のデータは以下のように、オブジェクトを囲む:

{ 
    "total": 2, 
    "rows": [ 
    { 
    "id":42 
    "name":"whatever", 
    "description":"whatever" 
    "cover_img":"https://whatever.jpg" 
    "available_count":10, 
    "price":6.99, 
    "author_id":21, 
    "publisher_id":5, 
    "author_first_name":"Harper", 
    "author_last_name":"Lee", 
    "author_birthday":"1926-04-27T22:00:00.000Z", 
    "publisher_name":"Penguin Fiction" 
    }, 
    ...] 
} 
関連する問題