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 サイトの他の関連記事を参照してください。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ホットトピック









