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 コンポーネントにいくつかの変更を加える必要があります。変更内容は、前述の並べ替え機能の追加と同様です。異なる点は、フィルター インターフェイスがさらに改良され、メッセージの範囲が制限されることです。以下は最終的なグリッド コンポーネントです。
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")));
}
}
この一連の記事は、xmlplus フレームワークに基づいています。 xmlplus についてあまり詳しくない場合は、www.xmlplus.cn にアクセスしてください。詳細な入門ドキュメントはここから入手できます。
【関連おすすめ】
1.
無料のjsオンラインビデオチュートリアル3. php.cn Dugu Jiijian (3) - JavaScriptビデオチュートリアル
以上がJavaScript フレームワーク (xmlplus) コンポーネントの概要 (10) グリッド (DataGrid)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

WebStorm Mac版
便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
