JavaScript フレームワーク (xmlplus) コンポーネントの概要 (10) グリッド (DataGrid)
xmlplus は、フロントエンドおよびバックエンド プロジェクトを迅速に開発するための JavaScriptフレームワーク です。この記事では、xmlplus コンポーネント設計シリーズで主に xmlplus グリッドを紹介します。興味のある方は参考にしてください。この章では、最も基本的なグリッド コンポーネントを実装します。データ表示機能に加えて、並べ替え機能や
データフィルタリング
これからグリッド コンポーネントを作成することをテストするために、次の形式のデータ ソースを使用します。このデータ ソースには、ヘッダー
とテーブル本体データ セットの 2 つの部分が含まれています。グリッド コンポーネント インスタンスの最終的な列数は、ヘッダー データ セットの長さによって決まります。 var data = {
gridColumns: ['name', 'power'],
gridData: [
{ name: 'Chuck Norris', power: Infinity },
{ name: 'Bruce Lee', power: 9000 },
{ name: 'Jackie Chan', power: 7000 },
{ name: 'Jet Li', power: 8000 }
]
};
視覚的には、グリッドコンポーネントをテーブルヘッダーとテーブル本体に自然に分割します。このグリッド コンポーネントには 3 つの機能があるため、3 つの動的
を提供する必要があります。しかし、並べ替え機能はテーブル ヘッダーをクリックすることで実行され、テーブル ヘッダーはグリッド コンポーネントの一部であるため、この関数を組み込む必要があることに気付きました。したがって、実際には、グリッド コンポーネントは 2 つの動的インターフェイスのみを外部に公開します。1 つはフィルタリング用で、もう 1 つはデータ ソースの受信用です。したがって、次のようにトップレベルの設計を取得できます。 DataGrid: {
xml: `<table id='table'>
<Thead id='thead'/>
<Tbody id='tbody'/>
</table>`,
fun: function (sys, items, opts) {
function setValue(data) {
items.thead.val(data.gridColumns);
items.tbody.val(data.gridColumns, data.gridData);
}
function filter(filterKey) {
// 过滤函数
}
return { val: setValue, filter: filter };
}
}
テーブルヘッダーには 1 行しかないため、tr 要素を直接指定できます。 tr 要素の子項目の数はヘッダー データ セットの長さに依存するため、動的に作成する必要があります。 th 要素には並べ替え関数が含まれるため、個別にカプセル化する必要があります。以下は私たちが提供したヘッダーのデザインです。
Thead: { xml: `<thead id='thead'> <tr id='tr'/> </thead>`, fun: function (sys, items, opts) { function setValue(value) { sys.tr.children().call("remove"); data.forEach(item => sys.tr.append("Th").value().val(item)); } return { val: setValue }; } }
ヘッダー データ項目コンポーネントはテキスト設定インターフェイスを提供します。コンポーネント自体は並べ替えを担当しません。コンポーネント自体の
viewstate の変更と並べ替えコマンドのディスパッチのみを完了します。並べ替えコマンドのディスパッチには 2 つのデータが必要です。1 つは並べ替えキーワード (ヘッダー テキスト)、もう 1 つは並べ替え方向 (昇順または降順) です。 Th: {
css: "#active { color: #fff; } #active #arrow { opacity: 1; } #active #key { color: #fff; }\
#arrow { display: inline-block; vertical-align: middle; width: 0; height: 0; margin-left: 5px; opacity: 0.66; }\
#asc { border-left: 4px solid transparent; border-right: 4px solid transparent; border-bottom: 4px solid #fff;}\
#dsc { border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 4px solid #fff; }",
xml: "<th id='th'>\
<span id='key'/><span id='arrow'/>\
</th>",
fun: function (sys, items, opts) {
var order = "#asc";
this.watch("sort", function (e, key, order) {
sys.key.text().toLowerCase() == key || sys.th.removeClass("#active");
});
this.on("click", function (e) {
sys.th.addClass("#active");
sys.arrow.removeClass(order);
order = order == "#asc" ? "#dsc" : "#asc";
sys.arrow.addClass(order).notify("sort", [sys.key.text().toLowerCase(), order]);
});
sys.arrow.addClass("#asc");
return { val: sys.key.text };
}
}
テーブル本体には複数の行を含めることができますが、テーブル本体はデータを表示するだけなので、テーブルヘッダーよりも実装がはるかに簡単です。
Tbody: { xml: `<tbody id='tbody'/>`, fun: function (sys, items, opts) { function setValue(gridColumns, gridData) { sys.tbody.children().call("remove"); gridData.forEach(data => tr = sys.tbody.append("tr"); gridColumns.forEach(key => tr.append("td").text(data[key])); )); } return { val: setValue }; } }
管理を容易にするために、並べ替え機能をコンポーネントに個別にカプセル化し、並べ替えインターフェイスを提供し、並べ替えメッセージをリッスンします。ソートメッセージを受信すると、キーワードとソート方向が記録され、テーブル更新コマンドが発行されます。
Sort: { fun: function (sys, items, opts) { var sortKey, sortOrder; this.watch("sort", function (e, key, order) { sortKey = key, sortOrder = order; this.trigger("update"); }); return function (data) { return sortKey ? data.slice().sort(function (a, b) { a = a[sortKey], b = b[sortKey]; return (a === b ? 0 : a > b ? 1 : -1) * (sortOrder == "#asc" ? 1 : -1); }) : data; }; } }
並べ替え関数を完全に実装するには、主に上記の並べ替え関数コンポーネントを組み込み、テーブル本体の更新コマンドをリッスンするために、コンポーネント DataGrid にいくつかの変更を加えます。リフレッシュコマンドを受信すると、テーブル本体のデータがソートされ、テーブル本体がリフレッシュされます。
DataGrid: { xml: `<table id='table'> <Thead id='thead'/> <Tbody id='tbody'/> <Sort id='sort'/> </table>`, fun: function (sys, items, opts) { var data = {gridColumns: [], gridData: []}; function setValue(value) { data = value; items.thead.val(data.gridColumns); items.tbody.val(data.gridColumns, data.gridData); } function filter(filterKey) { // 过滤函数 } this.on("update", function() { items.tbody.val(items.sort(data.gridData)); }); return { val: setValue, filter: filter }; } }
並べ替え関数を追加するプロセスと同様に、フィルタリング関数を別のコンポーネントにカプセル化します。これにより、フィルタリング インターフェイスが提供され、フィルタリング メッセージがリッスンされます。メッセージが受信されると、フィルター キーワードが記録され、テーブル本体の更新コマンドが送出されます。 Filter: {
fun: function (sys, items, opts) {
var filterKey = "";
this.watch("filter", function (e, key) {
filterKey = key.toLowerCase();
this.trigger("update");
});
return function (data) {
return data.filter(function (row) {
return Object.keys(row).some(function (key) {
return String(row[key]).toLowerCase().indexOf(filterKey) > -1;
});
});
};
}
}
DataGrid: { css: `#table { border: 2px solid #42b983; border-radius: 3px; background-color: #fff; } #table th { background-color: #42b983; color: rgba(255,255,255,0.66); cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } #table td { background-color: #f9f9f9; } #table th, #table td { min-width: 120px; padding: 10px 20px; }`, xml: `<table id='table'> <Thead id='thead'/> <Tbody id='tbody'/> <Sort id='sort'/> <Filter id='filter'/> </table>`, map: { msgscope: true }, fun: function (sys, items, opts) { var data = {gridColumns: [], gridData: []}; function setValue(value) { data = value; items.thead.val(data.gridColumns); items.tbody.val(data.gridColumns, data.gridData); } function filter(filterKey) { sys.table.notify("filter", filterKey); } this.on("update", function() { items.tbody.val(items.filter(items.sort(data.gridData))); }); return { val: setValue, filter: filter }; } }
メッセージの範囲を制限するオプションをマッピング項目で設定する必要があることに注意してください。そうしないと、アプリケーション内で複数のグリッド コンポーネントがインスタンス化されるときに、メッセージが相互に干渉します。
テスト最後に、完成したコンポーネントをテストしましょう。テストされる主な機能は、最初に説明した、データの表示、並べ替え、フィルターです。 Index: {
css: "#index { font-family: Helvetica Neue, Arial, sans-serif; font-size: 14px; color: #444; }\
#search { margin: 8px 0; }",
xml: "<p id='index'>\
Search <input id='search'/>\
<Table id='table'/>\
</p>",
fun: function (sys, items, opts) {
items.table.val(data);
sys.search.on("input", e => items.table.filter(sys.search.prop("value")));
}
}
【関連おすすめ】
1.
無料のjsオンラインビデオチュートリアル3. php.cn Dugu Jiijian (3) - JavaScriptビデオチュートリアル
以上がJavaScript フレームワーク (xmlplus) コンポーネントの概要 (10) グリッド (DataGrid)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

このチュートリアルでは、chart.jsを使用してパイ、リング、およびバブルチャートを作成する方法について説明します。以前は、4つのチャートタイプのchart.js:ラインチャートとバーチャート(チュートリアル2)、およびレーダーチャートと極地域チャート(チュートリアル3)を学びました。 パイとリングチャートを作成します パイチャートとリングチャートは、さまざまな部分に分かれている全体の割合を示すのに理想的です。たとえば、パイチャートを使用して、サファリの男性ライオン、女性ライオン、若いライオンの割合、または異なる候補者が選挙で受け取る票の割合を示すことができます。 パイチャートは、単一のパラメーターまたはデータセットの比較にのみ適しています。パイチャートのファンの角度はデータポイントの数値サイズに依存するため、パイチャートは値のあるエンティティをゼロ値で描画できないことに注意してください。これは、割合がゼロのエンティティを意味します

エントリーレベルのタイプスクリプトチュートリアルをマスターしたら、TypeScriptをサポートするIDEで独自のコードを作成し、JavaScriptにコンパイルできるはずです。このチュートリアルは、TypeScriptのさまざまなデータ型に飛び込みます。 JavaScriptには、NULL、未定義、ブール値、数字、文字列、シンボル(ES6によって導入)とオブジェクトの7つのデータ型があります。 TypeScriptはこれに基づいてより多くのタイプを定義し、このチュートリアルではすべてを詳細に説明します。 ヌルデータ型 JavaScriptのように、Typescriptのnull
