2017-05-23 6 views
1

jsPDFとAutoTableプラグインを使用し始めました。これは、私たちが使用しているものにほぼ完璧です。 1つの質問...jspdf autotableプラグインのネストされたJSONプロパティにアクセス

テーブルにマップされているJSON内のネストされたプロパティに、列定義のdataKeyを割り当てることはできますか?

"Primary_Key": "12345", 
"Site_Name": { 
    "Address_Name": "Address 1" 
    }, 
"Default_Screen_Name": "Bob", 
"Full_Name": "Bob Smith" 

は、我々は次の列を使用する場合::

var columns = [ 
    { title: "ID", dataKey: "Primary_Key" }, 
    { title: "Screen Name", dataKey: "Default_Screen_Name" }, 
    { title: "Full Name", dataKey: "Full_Name" }]; 

すべてが完璧に動作

は、我々はこのようになりますJSON構造を有しています。しかし、我々はまた、次のような何かをしたいと思います:

我々は値を取得するために、ネストされたJSONオブジェクトへのインデックスに Site_Name.Address_Nameを使用している
var columns = [ 
    { title: "ID", dataKey: "Primary_Key" }, 
    { title: "Iterations", dataKey: "Iterations" }, 
    { title: "Screen Name", dataKey: "Default_Screen_Name" }, 
    { title: "Site Name", dataKey: "Site_Name.Address_Name" }]; 

これは可能でしょうか?

答えて

2

現時点ではありません。その機能要求hereに従うことができます。あなたのオプションは現在、データを自動化可能なものに渡す前にデータを平坦化するか、フックを使って必要な特定のテキストを抽出します。 (v2.3.2が必要です)コメントで追加の質問に対して

var columns = [ 
 
    {title: "ID", dataKey: "id"}, 
 
    {title: "Name", dataKey: "name"}, 
 
    {title: "Country", dataKey: "address"} 
 
]; 
 
var rows = [ 
 
    {id: 1, name: "Shaw", address: {country: "Tanzania"}}, 
 
    {id: 2, name: "Nelson", address: {country: "Kazakhstan"}}, 
 
    {id: 3, name: "Garcia", address: {country: "Madagascar"}} 
 
]; 
 

 
var doc = jsPDF(); 
 
doc.autoTable(columns, rows, { 
 
    createdCell: function(cell, data) { 
 
     if (data.column.dataKey === 'address') { 
 
      cell.text = cell.raw.country; 
 
     } 
 
    } 
 
}); 
 
doc.save('table.pdf');
<script src="https://unpkg.com/[email protected]/dist/jspdf.min.js"></script> 
 
<script src="https://unpkg.com/[email protected]/dist/jspdf.plugin.autotable.js"></script>

更新:それは次のように行うことができます

var columns = [ 
    {title: "Country", dataKey: "address", displayProperty: "country"}, 
    ... 
]; 
var rows = [...]; 

... 

createdCell: function(cell, data) { 
    if (data.column.dataKey === 'address') { 
     var prop = data.column.raw.displayProperty; 
     cell.text = cell.raw[prop]; 
    } 
} 
+0

は非常に迅速に答えてくれてありがとう!あなたの提案は私たちが必要とするものに対して完全に機能すると思います。私は将来の変更のためにGitHubの問題に登録しました。 –

+0

"country"プロパティをcreatedCell関数にハードコードする必要がないように、列定義に追加情報を提供することは可能ですか?ありがとう! –

+1

バージョン2.3.2では、 'column.raw'の列定義にセルや行と同様にアクセスできます。これがどのように使用できるかを強調表示する例を追加しました。私はそれがあなたが望んだものだと思います。 –

関連する問題