Introducing React ReExt – Sencha Ext JS Components in React! LEARN MORE

Ext JS Data Gridをすばやくカスタマイズする方法(part 4/6)– データ表示形式を柔軟にカスタマイズする

July 16, 2020 138 Views
Show

全6回構成の「Ext JSグリッドのカスタマイズ」ブログシリーズの4回目の記事では、柔軟にデータグリッドをカスタマイズすることにフォーカスします。 第1回〜第3回の記事は次のリンクよりお読みいただけます。

第1回:GridとColumnのプロパティをカスタマイズする
第2回:グループ化されたグリッド
第3回:編集機能の追加や行の折りたたみ表示

Ext JSのGridではデータ表示のカスタマイズが容易に行えます。 この記事ではNBA 2020プレーヤーのレーティング情報を表示するグリッドをサンプルとして使用します。

最初の例では、プレーヤーの身長をフィートやインチにして表示したり、年俸の金額を3桁区切りで表示するために、rendererメソッドやformatterプロパティを使用します。

まず、今回の表示で用いるデータは次のように作成しており、身長(ht) や年俸(Salary)は数値がそのまま用いられています。桁区切りの記号は含みません。

    "data": [
        {
            "player": "Kemba Walker",
            "team": "Boston Celtics",
            "rating": 88,
            "dunkRating": 30,
            "threePointRating": 83,
            "position": "PG",
            "ht": 60,
            "salary": 32742000
        },
        {
            "player": "Jayson Tatum",
            "team": "Boston Celtics",
            "rating": 86,
            "dunkRating": 83,
            "threePointRating": 90,
            "position": "SF",
            "ht": 68,
            "salary": 7830000
        },
        {
            "player": "Jaylen Brown",
            "team": "Boston Celtics",
            "rating": 85,
            "dunkRating": 82,
            "threePointRating": 85,
            "position": "SG",
            "ht": 66,
            "salary": 6534829
        },
        {
            "player": "Gordon Hayward ",
            "team": "Boston Celtics",
            "rating": 82,
            "dunkRating": 81,
            "threePointRating": 75,
            "position": "PG",
            "ht": 67,
            "salary": 32700690
        },
        {
            "player": "Marcus Smart",
            "team": "Boston Celtics",
            "rating": 82,
            "dunkRating": 74,
            "threePointRating": 50,
            "position": "SG",
            "ht": 63,
            "salary": 12553471
        }
    ]

この情報をGridで表示するときに、プレイヤーの身長(Height)と年俸(salary)をフォーマットして表示できます。実際の表示例は以下のとおりです。


身長(Height)の表示形式をカスタマイズする

renderer メソッドは、Gridのカラムで表示するデータをレンダリング前に変換したい時に使用できます。カラムのコンフィグでデフォルトの renderer メソッドをオーバーライドする function を実装して使用します。

{
    dataIndex: 'ht',
    text: 'Height',
    flex: 1,
    renderer: function(value) {
        let height = value.toString();
        return height.substring(0, 1) + '\'' + height.substring(1, 2) + '"';
    }
}

年俸(Salary)のフォーマットをカスタマイズする

formatter コンフィグで Ext.util.Format のメソッドを指定できます。下記の例では ‘usMoney’ と設定してUSドルのフォーマットで表示します。

{
    dataIndex: 'salary',
    formatter: 'usMoney',
    text: 'Salary',
    flex: 1
}

このコードをFiddle Toolで確認して実行する

データ型に合わせたカラムを設定する

ここまでの実装では、それぞれのカラムの xtype を明示的に指定していないため、Ext.grid.column.Column が用いられました。しかしカラムの種類を明示するとデータ型に適した表示が行われます。

Ext.grid.column.Boolean true/falseの値の表示用
Ext.grid.column.Date 日付や時刻の表示用
Ext.grid.column.Number 数値の表示用

この例示のために次のようなデータセットを使用し、player, salary, lastYearContract の項目を表示する Grid を作成します。

[
    {
    "player: "Kemba Walker",
    "team": "Boston Celtics",
    "rating": 88,
    "dunkRating": 30,
    "threePointRating": 83,
    "position": "PG",
    "ht": 60,
    "salary": 32742000,
    "twoPointPercent": 0.48,
    "threePointPercent": 0.38,
    "scoringEvolution": [12,17,17,17,21,23,22,25,22],
    "plusMinusEvolution2020": [-16,7,13,8,4,0,20,21,18,-4,2,0,22,-8,-9,4,-10,7,16],
    "lastYearContract": false
    },
    ...
]

 

Sarary の列は xtype: ‘numbercolumn’ と設定することで、3桁ごとのカンマ区切りと小数点以下2桁までの形式による表示になります。汎用的な数値向けのカラムのため$記号は含みませんが、必要に応じて表示形式はカスタマイズできます。

lastYearContract の列は Yes/No で表示していますが、元のデータは true / false です。このように表示するために xtype: ‘booleancolumn’ を使用し、さらに trueText, falseText によるカスタマイズを行います。

{
    xtype: 'numbercolumn',
    dataIndex: 'salary',
    text: 'Salary',
    flex: 1
}, {
    xtype: 'booleancolumn',
    dataIndex: 'lastYearContract',
    text: 'Is last year contract',
    trueText: 'Yes',
    falseText: 'No',
    flex: 1
}

このコードをFiddle Toolで確認して実行する

もし、表示する金額の通貨がUSドルではなく日本円の場合は次のように format: ‘0,000’ とすれば小数点部分が非表示になります。実際の動作は Fiddle tool のコードを修正して再実行することでご確認いただけます。

{
    xtype: 'numbercolumn',
    format: '0,000',
    dataIndex: 'salary',
    align: 'right',
    flex: 1
}

Ext.grid.column.Number の format で記述可能な書式は Ext.util.Format.html に解説がありますので、こちらもお読みください。

次回の記事では「ウィジェットカラムでグリッドをカスタマイズする方法」を解説します。

第5回の記事を読む

Ext JS 7.2 でデータグリッドを作成する

Ext JS 7.2の30日間無料トライアルは、製品の全ての機能にアクセスできます。アプリケーションに高性能なデータグリッドを作成する方法をお読みいただき、Get Started のドキュメントから始めましょう!

Recommended Articles

Ext JS Performance Optimization for Large-scale Applications

Are you facing issues with Ext JS applications’ performance as they scale up? Don’t worry! This blog covers the main topics for optimizing Ext JS…

Ext JS Dynamic Forms: Hands-On Guide to Create Data Forms

Dynamic forms are changing the online world these days. ExtJS can help you integrate such forms into your website. It has scalable and excellent reusable…

JavaScript Design Patterns: A Hands-On Guide with Real-world Examples

As a web developer, you know how popular JavaScript is in the web app development landscape. It powers thousands of web applications, from simple to…

Virtual JS Days 2024のハイライト

2024年2月20日~22日、第3回目となる「Virtual JavaScript Days」が開催されました。JavaScript の幅広いトピックを採り上げた数多くのセッションを実施。その内容は、Senchaの最新製品、ReExt、Rapid Ext JSまで多岐にわたり、JavaScriptの最新のサンプルも含まれます。 このカンファレンスでは多くのトピックをカバーしています。Senchaでセールスエンジニアを務めるMarc Gusmano氏は、注目すべきセッションを主催しました。Marc は Sencha の最新製品「ReExt」について、詳細なプレゼンテーションを実施。その機能とメリットを、参加者に理解してもらうべく詳細に説明しました。 カンファレンスは、Senchaのジェネラルマネージャを務めるStephen Strake氏によるキーノートでスタートしました。キーノートでは、会社の将来のビジョンについての洞察を共有しています。世界中から JavaScript 開発者、エンジニア、愛好家が集まるとてもエキサイティングなイベントとなりました。これは、JavaScript エコシステムの最新情報について学ぶユニークな機会と言えます。

JS Frameworks: A Guide to Dodging 10 Common Blunders

Ext JS is one of the most popular JS frameworks for creating interactive websites. However, beginners often face challenges when using it. This guide helps…

7 Tips for Optimizing Performance in JavaScript Grids

A JavaScript data grid is a UI element that enables developers to efficiently present data in a tabular format. These grids essentially allow us to…

View More