JavaScript フレームワーク (xmlplus) コンポーネントの紹介 (9 つ) ツリー (ツリー)
xmlplus は、フロントエンドおよびバックエンド プロジェクトを迅速に開発するための JavaScript フレームワークです。この記事では主に xmlplus コンポーネント設計シリーズのツリーを紹介します。興味のある方は参考にしてください。ツリー コンポーネントは階層構造を持ち、さまざまなシーンで広く使用されています。この章では、単純なツリー コンポーネントを実装します。その機能は制限されていますが、必要なツリー コンポーネントを実装するために拡張できます。
ツリーコンポーネントのデータソースは、JSON形式のデータオブジェクトにすることも、XML構造のデータや階層構造を持つその他のデータにすることもできます。この章では、次の JSON 形式のデータ オブジェクトを使用します。
var data = { name: 'My Tree', children: [ { name: 'hello' }, { name: 'world' }, { name: 'child folder', children: [ { name: 'alice' } ] } ] };
上記のデータ ソースでは、name 値がツリー ノードの名前として表示され、子を含む配列はノードの子を表します。
再帰構造の設計
は、HTML のリスト要素 ul と li で構成されており、これらをツリー コンポーネントを構築するための基本要素として使用することもできます。ツリー コンポーネントの最外層は ul 要素である必要があるため、次のようにツリー コンポーネントを一時的に定義できます:
Tree: { xml: `<ul id='tree'> <Item id='item'/> </ul>` }
ここでの未定義コンポーネントの項目は、再帰的に定義する必要があるサブ項目コンポーネントであり、再帰的になります。提供されたデータに基づいて子孫オブジェクトを生成します。考えられるデザインは次のとおりです:
Item: { xml: `<li id='item'> <p id='content'> <span id='neme'/><span id='expand'/> </p> <ul id='entries'/> </li>`, map: { defer: "entries" } }
上記の neme オブジェクトは name 属性を表示するために使用されることに注意してください。展開オブジェクトは、子オブジェクトのエントリを展開したり閉じたりするために使用されます。子オブジェクトのエントリは、遅延インスタンス化を必要とするように設定されており、ユーザーが展開オブジェクトをクリックして子を展開したときにのみインスタンス化されます。
データのロードとレンダリング
前のセクションで説明したように、子オブジェクトのエントリが遅延インスタンス化されるように設定しました。したがって、サブアイテム項目に提供されるデータ設定インターフェイスは、エントリをすぐにインスタンス化する必要はありません。以下では、まずデータ インターフェイス関数を示します。
Item: { // css, xml, map 项同上 fun: function (sys, items, opts) { var data; function val(value) { data = value; sys.neme.text(data.name); data.children && data.children.length && sys.expand.show().text(" [+]"); } return { val: val }; } }
このインターフェース関数 val は、現在のノードに関連するコンテンツを設定するだけです。次に、展開オブジェクトのクリック イベントをリッスンし、コンポーネント オブジェクト エントリのインスタンス化を適時に完了します。
Item: { // css, xml, map 项同上 fun: function (sys, items, opts) { var data, open; sys.expand.on("click", function () { open = !open; sys.expand.text(open ? " [-]" : " [+]"); open ? (sys.entries.show() && load()) : sys.entries.hide(); }); function load() { if ( sys.entries.children().length == 0 ) for ( var item of data.children ) sys.add.before("Item").value().val(item); } function val(value) { data = value; sys.neme.text(data.name); data.children && data.children.length && sys.expand.show().text(" [+]"); } return { val: val }; } }
上記のコードには、現在のノードが関連するリスナーで使用するために展開された状態にあるかどうかを記録するオープン パラメーターが含まれています。
ノードを動的に追加する
次に、ツリー ノードを動的に追加する機能をサポートするように、上記のコンポーネントに小さな拡張を加えます。まず、エントリ オブジェクトの子にトリガー ボタンを追加し、add という名前を付けます。
Item: { xml: "<li id='item'> <p id='content'> <span id='neme'/><span id='expand'/> </p> <ul id='entries'> <li id='add'>+</li> </ul> </li>", map: { defer: "entries" } }
次に、追加オブジェクトのクリック イベントをリッスンし、リスナーでのオブジェクトの追加を完了する必要があります。
Item: { // css, xml, map 项同前 fun: function (sys, items, opts) { var data, open; sys.item.on("click", "//*[@id='add']", function () { var stuff = {name: 'new stuff'}; data.children.push(stuff); sys.add.before("Item").value().val(stuff); }); // 其余代码同前 } }
ここで、追加オブジェクトのリスナーを使用して直接リッスンすることはできないことに注意してください: sys.add.on("click",...) ただし、プロキシ メソッドを使用する必要があります。そうでない場合は、エラーが報告されます。 。その親は遅延インスタンス化されたコンポーネントであるため、追加オブジェクトは、entries オブジェクトがインスタンス化されるまで表示されません。
完全なツリーコンポーネント
上記の内容に基づいて、ツリーコンポーネントの完全版が提供されます:
Tree: { css: `#tree { font-family: Menlo, Consolas, monospace; color: #444; } #tree, #tree ul { padding-left: 1em; line-height: 1.5em; list-style-type: dot; }`, xml: `<ul id='tree'> <Item id='item'/> </ul>`, fun: function (sys, items, opts) { return items.item; } }, Item: { css: "#item { cursor: pointer; }", xml: `<li id='item'> <p id='content'> <span id='neme'/><span id='expand'/> </p> <ul id='entries'> <li id='add'>+</li> </ul> </li>`, map: { defer: "entries" }, fun: function (sys, items, opts) { var data, open; sys.item.on("click", "//*[@id='add']", function () { var stuff = {name: 'new stuff'}; data.children.push(stuff); sys.add.before("Item").value().val(stuff); }); sys.expand.on("click", function () { open = !open; sys.expand.text(open ? " [-]" : " [+]"); open ? (sys.entries.show() && load()) : sys.entries.hide(); }); function load() { if ( sys.entries.children().length == 1 ) for ( var item of data.children ) sys.add.before("Item").value().val(item); } function val(value) { data = value; sys.neme.text(data.name); data.children && data.children.length && sys.expand.show().text(" [+]"); } return { val: val }; } }
実際のアプリケーションのツリーコンポーネントにはここよりも多くの機能があり、さらに改善することができます上記のコードに基づいて、いくつかの ICON アイコンを追加したり、サブ項目をドラッグ可能にしたりします。ただし、改善のプロセスではコードの複雑化をできるだけ避けることが非常に重要であり、一部のコードを適切に削除してコンポーネントにカプセル化する必要があります。
この一連の記事は、xmlplus フレームワークに基づいています。 xmlplus についてあまり詳しくない場合は、
www.xmlplus.cn にアクセスしてください。詳細な入門ドキュメントはここから入手できます。1.
無料のjsオンラインビデオチュートリアルphp.cn Dugu Jiijian (3) - JavaScriptビデオチュートリアル以上がJavaScript フレームワーク (xmlplus) コンポーネントの紹介 (9 つ) ツリー (ツリー)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











win10で一部のゲームをプレイすると、画面がフリーズしたり画面がぼやけるなどの不具合が多くのユーザーに発生しますが、現時点ではダイレクトプレイ機能をオンにすることで問題を解決でき、機能の操作方法も非常に簡単です。 win10 の古いコンポーネントである Directplay をインストールする方法 1. 検索ボックスに「コントロール パネル」と入力して開きます 2. 表示方法として大きなアイコンを選択します 3. 「プログラムと機能」を見つけます 4. 左側をクリックして有効にするか、 Win 機能をオフにする 5. ここで古いバージョンを選択します チェックボックスをオンにするだけです

Vue は非常に人気のあるフロントエンド フレームワークであり、コンポーネント化、データ バインディング、イベント処理など、開発者が効率的で柔軟で保守が容易な Web アプリケーションを構築するのに役立つ多くのツールと機能を提供します。この記事では、Vueを使ってカレンダーコンポーネントを実装する方法を紹介します。 1. 要件の分析 まず、このカレンダー コンポーネントの要件を分析する必要があります。基本的なカレンダーには次の機能が必要です: 当月のカレンダー ページの表示、前月または翌月への切り替えのサポート、特定の日のクリックのサポート、

Vue は現在最も人気のあるフロントエンド フレームワークの 1 つであり、VUE3 は Vue フレームワークの最新バージョンであり、VUE2 と比較してパフォーマンスが高く、開発エクスペリエンスが優れているため、多くの開発者の最初の選択肢となっています。 VUE3 では extends を使ってコンポーネントを継承することが非常に実用的な開発手法となっておりますので、この記事では extends を使ってコンポーネントを継承する方法を紹介します。エクステンドとは何ですか? Vue では、extends は非常に実用的な属性であり、子コンポーネントが親から継承するために使用できます。

Vue はどのようにして JSX を通じてコンポーネントを動的にレンダリングしますか?次の記事では、Vue が JSX を通じてコンポーネントを効率的に動的にレンダリングする方法を紹介します。

Angular フレームワークのコンポーネントのデフォルトの表示動作は、ブロックレベルの要素ではありません。この設計の選択により、コンポーネント スタイルのカプセル化が促進され、開発者が各コンポーネントの表示方法を意識的に定義することが促進されます。 CSS プロパティの表示を明示的に設定することで、Angular コンポーネントの表示を完全に制御して、目的のレイアウトと応答性を実現できます。

Win10 の古いバージョンのコンポーネントは、デフォルトで閉じられていることが多いため、ユーザー自身が設定で有効にする必要があります。まず、設定を入力する必要があります。操作は非常に簡単です。以下の手順に従ってください。Win10 の古いバージョンはどこにありますか?バージョン コンポーネント? 開く 1. [スタート] をクリックし、[Win システム] をクリックします 2. クリックしてコントロール パネルに入ります 3. 次に、下のプログラムをクリックします 4. [Win 機能を有効または無効にする] をクリックします 5. ここで必要なものを選択できます開く

Vue コンポーネントの開発: プログレス バー コンポーネントの実装方法 はじめに: Web 開発では、プログレス バーは一般的な UI コンポーネントであり、データ要求、ファイルのアップロード、フォームの送信などのシナリオで操作の進行状況を表示するためによく使用されます。 Vue.jsではコンポーネントをカスタマイズすることで簡単にプログレスバーコンポーネントを実装することができますので、本記事ではその実装方法と具体的なコード例を紹介します。 Vue.js初心者の参考になれば幸いです。コンポーネントの構造とスタイル まず、プログレスバーコンポーネントの基本構造とスタイルを定義する必要があります。

Vue コンポーネントの実践: ページング コンポーネント開発の概要 Web アプリケーションでは、ページング機能は不可欠なコンポーネントです。優れたページング コンポーネントは、プレゼンテーションがシンプルかつ明確で、機能が豊富で、統合と使用が簡単である必要があります。この記事では、Vue.js フレームワークを使用して高度にカスタマイズ可能なページング コンポーネントを開発する方法を紹介します。 Vueコンポーネントを使った開発方法をコード例を通して詳しく解説します。テクノロジースタック Vue.js2.xJavaScript (ES6) HTML5 および CSS3 開発環境
