![](https://habrastorage.org/storage2/1ba/ca5/779/1baca5779a48dcee52ac96d22cc91548.png)
コンポーネントを使用するための条件は、「一般に受け入れられている」ものとは多少異なります。最新の(IE9 +)ブラウザーがランタイム環境として使用されます(Webプロジェクトは完全に制御された内部ネットワーク内で使用されることになっています)。 もう1つのポイントは、サーバー部分の開発に基づいたプラットフォームです。 これはASP.NET MVCです。つまり、ASP.NET MVCアプリケーションの一般的なディレクトリ構造に適したNuGetパッケージとしてコンポーネントを配信することが望ましいということです。
この問題に取り組む過程で、既存のオプションを研究し、いつものように、
この記事の執筆時点では、インターネット上で、要素のツリーを表示するための最も一般的な6つのコンポーネントを見つけることができます。
- jsTree 。 昨年のhabrahabrでのjsTree の議論から判断すると、一部の開発者はDynatreeを好んでいます。
- jqTree 。 それは最も楽しい印象を与えます。 おそらく、優れた設計と詳細なドキュメントが原因です。
- jQuery TreeViewプラグイン 。 著者は、プロジェクトがもはや積極的に開発されていないと報告し、jqTreeの使用を推奨しています。
- ダイナツリー
- dhtmlxTree 。
- dTree 。
いくつかの結論。
- すべては、古い顧客をサポートするための間接費によって特徴付けられます。
- 最初の4つは動作するためにjqueryを必要とします。 5番目はフレームワークを使用します。 後者だけが自給自足です。
- さらに、後者は比較的古い「恐竜」(2003)であり、zipアーカイブの形式でのみ利用可能です。
- 最初の4つだけがパブリックバージョン管理を持っています。 同時に、最初の3つのリポジトリのみがGitHubに投稿されます。 DynatreeリポジトリはGoogle Codeにあります。 どうやら、Dynatreeは既にGitHubにあるFancytreeプロジェクトに進化していることに注意してください。
- どのプロジェクトにもNuGetパッケージは含まれていません。
長所と短所を比較検討した後、ASP.NET MVCおよびVisual Studio 2012に基づく最もシンプルで使いやすい標準アプリケーションテンプレートを、古いブラウザーをサポートする負担なしに、独自の自転車を発明することにしました。 自転車が発明されました。 その際立った特徴は次のとおりです。
- TypeScriptとLESSに基づく実装
- Compositeテンプレートに従ってツリー情報モデルを操作します。
CSSルールを分離するには、単純ですが、私の意見では、最も正しいアプローチが使用されます。
- 名前空間に対応するクラス名がツリーのコンテナ要素に追加されます。
- コンポーネントのすべてのCSSルールのセレクターはcontext- childであり、前の段落のクラスが唯一の必須ルート親として指定されます。
少ない | CSS |
---|---|
| |
Tree
は3つのパブリックメンバーがあります。
-
updateNode(...)
メソッドは、指定されたノードに要素を追加します。 -
onBranchExpand
およびonNodeClick
は、対応するイベントのハンドラーを指定するために使用されます。
renderNodeItemsTo(...)
および
toggleNodeItemsVisible(...)
は基本的なロジックを実装します。 ツリー要素の可視性の変更は、DOM要素を追加/削除することで実装されます(
Element.removeChild(...)
- jsperfを使用して削除します )。
toggleNodeItemsVisible(...)
メソッドは、指定されたツリーノード(JSオブジェクト)に要素がない場合、
false
返します。 これにより、
onBranchExpand
ハンドラーを呼び出す条件はかなり簡潔になります。
if(!this.toggleNodeItemsVisible(node) && (this.onBranchExpand instanceof Function)) { this.onBranchExpand(nodeId); }
特に、コンポーネントの実装時にTypeScript + LESSを使用すると、プロジェクトでの使用と、ニーズに合わせた改良が大幅に簡素化されます。
GitHub-github.com/resnyanskiy/js.tree
NuGet-nuget.org/packages/resnyanskiy.js.tree