ホームページ ウェブフロントエンド jsチュートリアル JavaScript フレームワーク (xmlplus) コンポーネントの概要 (10) グリッド (DataGrid)

JavaScript フレームワーク (xmlplus) コンポーネントの概要 (10) グリッド (DataGrid)

May 06, 2017 pm 03:29 PM
グリッド

xmlplus は、フロントエンドおよびバックエンド プロジェクトを迅速に開発するための JavaScriptフレームワーク です。この記事では、xmlplus コンポーネント設計シリーズで主に xmlplus グリッドを紹介します。興味のある方は参考にしてください。この章では、最も基本的なグリッド コンポーネントを実装します。データ表示機能に加えて、並べ替え機能や

データフィルタリング

機能も提供します。

データ ソース


これからグリッド コンポーネントを作成することをテストするために、次の形式のデータ ソースを使用します。このデータ ソースには、ヘッダー

データ セット

とテーブル本体データ セットの 2 つの部分が含まれています。グリッド コンポーネント インスタンスの最終的な列数は、ヘッダー データ セットの長さによって決まります。

トップレベルのデザイン


視覚的には、グリッドコンポーネントをテーブルヘッダーとテーブル本体に自然に分割します。このグリッド コンポーネントには 3 つの機能があるため、3 つの動的

インターフェース

を提供する必要があります。しかし、並べ替え機能はテーブル ヘッダーをクリックすることで実行され、テーブル ヘッダーはグリッド コンポーネントの一部であるため、この関数を組み込む必要があることに気付きました。したがって、実際には、グリッド コンポーネントは 2 つの動的インターフェイスのみを外部に公開します。1 つはフィルタリング用で、もう 1 つはデータ ソースの受信用です。したがって、次のようにトップレベルの設計を取得できます。

テーブルヘッダーの設計


テーブルヘッダーには 1 行しかないため、tr 要素を直接指定できます。 tr 要素の子項目の数はヘッダー データ セットの長さに依存するため、動的に作成する必要があります。 th 要素には並べ替え関数が含まれるため、個別にカプセル化する必要があります。以下は私たちが提供したヘッダーのデザインです。

Thead: {
 xml: `<thead id=&#39;thead&#39;>
  <tr id=&#39;tr&#39;/>
  </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 };
 }
}
ログイン後にコピー

ヘッダー データ項目コンポーネントはテキスト設定インターフェイスを提供します。コンポーネント自体は並べ替えを担当しません。コンポーネント自体の

view

state の変更と並べ替えコマンドのディスパッチのみを完了します。並べ替えコマンドのディスパッチには 2 つのデータが必要です。1 つは並べ替えキーワード (ヘッダー テキスト)、もう 1 つは並べ替え方向 (昇順または降順) です。

テーブル本体の設計


テーブル本体には複数の行を含めることができますが、テーブル本体はデータを表示するだけなので、テーブルヘッダーよりも実装がはるかに簡単です。

Tbody: {
 xml: `<tbody id=&#39;tbody&#39;/>`,
 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=&#39;table&#39;>
  <Thead id=&#39;thead&#39;/>
  <Tbody id=&#39;tbody&#39;/>
  <Sort id=&#39;sort&#39;/>
  </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 コンポーネントにいくつかの変更を加える必要があります。変更内容は、前述の並べ替え機能の追加と同様です。異なる点は、フィルター インターフェイスがさらに改良され、メッセージの範囲が制限されることです。以下は最終的なグリッド コンポーネントです。

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=&#39;table&#39;>
  <Thead id=&#39;thead&#39;/>
  <Tbody id=&#39;tbody&#39;/>
  <Sort id=&#39;sort&#39;/>
  <Filter id=&#39;filter&#39;/>
  </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=&#39;index&#39;>\
  Search <input id=&#39;search&#39;/>\
  <Table id=&#39;table&#39;/>\
  </p>",
 fun: function (sys, items, opts) {
 items.table.val(data);
 sys.search.on("input", e => items.table.filter(sys.search.prop("value")));
 }
}
ログイン後にコピー
この一連の記事は、xmlplus フレームワークに基づいています。 xmlplus についてあまり詳しくない場合は、www.xmlplus.cn にアクセスしてください。詳細な入門ドキュメントはここから入手できます。

【関連おすすめ】

1.

無料のjsオンラインビデオチュートリアル

3. php.cn Dugu Jiijian (3) - JavaScriptビデオチュートリアル

以上がJavaScript フレームワーク (xmlplus) コンポーネントの概要 (10) グリッド (DataGrid)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? 独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? Mar 18, 2025 pm 03:12 PM

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

ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? Mar 18, 2025 pm 03:14 PM

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

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

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

ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか? ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか? Mar 18, 2025 pm 03:16 PM

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

ソースマップを使用して、マイナイドJavaScriptコードをデバッグするにはどうすればよいですか? ソースマップを使用して、マイナイドJavaScriptコードをデバッグするにはどうすればよいですか? Mar 18, 2025 pm 03:17 PM

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

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

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

chart.js:パイ、ドーナツ、バブルチャートを始めます chart.js:パイ、ドーナツ、バブルチャートを始めます Mar 15, 2025 am 09:19 AM

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

初心者向けのタイプスクリプト、パート2:基本データ型 初心者向けのタイプスクリプト、パート2:基本データ型 Mar 19, 2025 am 09:10 AM

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

See all articles